Php 拉维4:哪里不存在
我需要我的模型只返回一个表中的记录,而另一个表中不存在匹配的记录。我认为解决方案可能是使用,但文档只触及表面。因此,我的SQL将如下所示:Php 拉维4:哪里不存在,php,mysql,laravel,eloquent,Php,Mysql,Laravel,Eloquent,我需要我的模型只返回一个表中的记录,而另一个表中不存在匹配的记录。我认为解决方案可能是使用,但文档只触及表面。因此,我的SQL将如下所示: SELECT * FROM A WHERE NOT EXISTS (SELECT A_id FROM B WHERE B.A_id = A.id) 这是我的桌子: A ------------- | id | name | ------------- B -------------------- | id | A_id |
SELECT *
FROM A
WHERE NOT EXISTS (SELECT A_id FROM B
WHERE B.A_id = A.id)
这是我的桌子:
A
-------------
| id | name |
-------------
B
--------------------
| id | A_id | name |
--------------------
可能没有必要,但这是我的模型。A的模型:
class A extends Eloquent{
public function B(){
return $this->hasOne('B', 'A_id', 'id');
}
}
B的模式:
class B extends Eloquent{
public function A(){
return $this->belongsTo('B', 'A_id', 'id');
}
}
差不多
A::whereNotExists(function($query)
{
$query->select(DB::raw(1))
->from('B')
->whereRaw('A.id = B.id');
})
->get();
我需要与has方法相反的方法。(是否有
hasNot()
方法?)我确实找到了wherenotesists
方法,我现在正在使用它。但我发现了一个问题:在whereRaw
中,我必须使用整个表名(前缀和全部),我不希望在代码中的任何地方找到前缀。另外,我猜上面的代码应该在控制器中。有没有办法在模型中实现这一点?您可以将其放在一个查询范围方法中,该方法包含:return static::whereNotExists(function($query){$query->select(DB::raw(1))->from('B')->whereRaw('a.id=B.id');})->get();这是有效的:scopeName($query){return$query->whereNotExists(function($query){$This_table=DB::getTablePrefix()。$This->table;$query->select(DB::raw('A_id'))->from('B')->whereRaw('A_id='.$This_table..id');}
谢谢