我有2个具有这种结构的表:
**table1**
id | title
-----+--------
1 | Blah1
2 | Blah2
**table2**
id | table1_id | article_id
-----+-------------+------------
1 | 1 | 1
2 | 1 | 3
3 | 2 | 1
现在,我想知道如何选择table1
中未使用的所有记录table2
例如,我需要table1
table2
中不存在的所有article_id=3
条记录
如何创建模型并使用雄辩的模型?
更新
我需要Blah2
中的table1
,然后向我的用户显示,因为之前为Blah1
插入了article_id = 3
。
更新2:
这是有效的查询,我需要为此查询编写模型:
SELECT a.*
FROM table1 AS a
WHERE a.id NOT IN (SELECT table1_id
FROM table2
WHERE article_id = 3
)
答案 0 :(得分:1)
你需要创建类似下面的模型,你可以适当地改变名称 在这里我会提到如下所示的内容 table1 => ParentModel和table2 => ChildModel
使用以下方法
定义ParentModel中子项的关系class ParentModel extends Model {
public function children() {
return $this->hasMany(ChildModel::class, 'table1_id');
}
}
whereDoesntHave方法可用于过滤具有相关模型的记录 点击这里https://laravel.com/docs/5.3/eloquent-relationships#querying-relationship-absence
ParentModel::whereDoesntHave('children', function($q){
// here $q refers to related model in this case ChildModel
$q->where('article_id', 3);
})->get();
上面的查询应返回所需的结果。