如何检查hasMany关系记录在雄辩的laravel中是空的

时间:2017-04-18 09:11:32

标签: php sql laravel eloquent

我需要获取那些没有加入的记录有很多表 我这样的查询

$result = Recipes::select('id')->where("name", 'like', '%' . $item . '%')
                    ->with(['categoryItem'])
                    ->get();

我的输出是

Array
(
    [0] => Array
        (
            [id] => 1
            [category_item] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [foodable_id] => 1
                            [foodable_type] => Recipes
                            [created_at] => 2017-04-14 16:18:22   
                        )

                )

        )

    [1] => Array
        (
            [id] => 4
            [category_item] => Array
                (
                )

        )

)

我想获得那些空的category_item详细信息的记录。在下面的示例中,我想获得索引1记录,以便如何为查询提供条件

2 个答案:

答案 0 :(得分:4)

如果我理解正确并且您想要获得没有categoryItem的收件人,则需要使用doesntHave()方法:

Recipes::where('name', 'like', '%'.$item.'%')
       ->doesntHave('categoryItem')
       ->get();

我认为categoryItem是已定义的关系,因为您尝试在with()方法中使用它。

答案 1 :(得分:0)

你好也许这可以提供帮助。 别忘了在文件顶部添加:

use DB;

你的结果将是这样的

$result = Recipes::select('id')->where("name", 'like', '%' . $item . '%') ->whereHas('categoryItem', function($q) { $q->where(DB::raw('count(*)),'>', 0); })->get();

我没有测试计数函数希望这个有效,祝你好运