Php 拉维4:哪里不存在

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 |

我需要我的模型只返回一个表中的记录,而另一个表中不存在匹配的记录。我认为解决方案可能是使用,但文档只触及表面。因此,我的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 | 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');}
谢谢