如何在Laravel eloquent eager loading中排除空关系?

时间:2017-07-07 12:41:56

标签: php laravel laravel-5 laravel-5.2 laravel-5.3

我正在使用Laravel Eloquent来查询MySQL数据库。我有一个表base_node和相关的表base_data(OneToOne关系)。 base_datanode_id = base_nodeid。查询如下

$result = BaseNode::with(['data' => function ($query) use ($filter_text) {

    $query->where('head', 'like', '%'. $filter_text. '%');

}])->get()->toJSon();

查询结果[{'id': 1, ..., 'data': {'id': 1, ...}}, {'id': 2, ..., 'data': null}]

如您所见,如果base_datahead与过滤条件不匹配,则结果中的data字段为空。如何构造有说服力的查询以完全从结果中排除这些行。例如,期望的结果是[{'id': 1, ..., 'data': {'id': 1, ...}}]

提前致谢!

1 个答案:

答案 0 :(得分:0)

According to @apokryfos answer, in Laravel 5.8 whereHas() had another syntax:

with("data")->whereHas([ "data", function ($query) use ($filter_text) ... ])