数据表查询问题

有省和市两张表,把所有的省和对应的市都查询出来,下面的代码可以完成。

public function index()
    {
        $provinces = Province::with('cities')->get();
        return view('pages.index', compact('provinces'));
    }

现在需要过滤一下,条件是:
1、有些省下面有地级市和县级市,县级市不显示,只显示省和对应的地级市。
2、有些省下面只有县级市,这种省不显示。
3、有些省下面什么都没有,这种省也不显示。
总结成一句话就是:只显示包含地级市的省,和该省对应的地级市。
需要怎么修改代码?

perfectboook

这个问题感觉有些乱,县级市应该是和县平级的,就是说要做的话,省市县应该是三级三个表。而且省的下面不应该是直接有县级市的,中间隔了一个市级。anyway,我按照你的需求写了一段代码:

Province::whereHas('cities',function($q){
    $q->where('xx','xx');
})->with(["cities"=>function($q){
    $q->where('xx','xx');
}])->get()

whereHas可以限制只显示有地级市的省。with限制的是有地级市的省只显示里面的地级市。$q->where('xx','xx');这里替换成你自己的判断地级市的条件。

这些用法都可以在 Eloquent 获取到。

perfectboook

另外说一下,你每次@别人,别人其实都是收不到的,在@符号的前面加上一个空格就可以了。

kanjiushi

@perfectboook thanks

kanjiushi

看了一下极客学院翻译完全的5.1文档,
http://wiki.jikexueyuan.com/project/laravel-5.1/start-2.html
有些问题更清晰了一些,就像挖土又往下削了薄薄的一层。同时有些疑问:

    public function store(Request $request)
    {
        // Validate the request...

        $flight = new Flight;

        $flight->name = $request->name;

        $flight->save();
    }

其中$flight = new Flight;
这个用法好像在楼主的教程中没这么用,能否说一下? @perfectboook @JellyBool

JellyBool

这是用法不一样而已 @kanjiushi