Laravel雄辩的LEFT JOIN WHERE NULL

我正在尝试使用Eloquent在数据库种子期间执行以下查询:

SELECT

*

FROM

customers

LEFT JOIN

orders

ON customers.id = orders.customer_id

WHERE

orders.customer_id IS NULL

这是我在Eloquent中的实现:

$c = Customer::leftJoin('orders', function($join) {

$join->on('customers.id', '=', 'orders.customer_id');

})

->whereNull('orders.customer_id')

->first();

尽管第一个查询始终返回完整结果,但Eloquent等价项始终为表的emailphone字段以外的所有内容返回空元素customers。由于CustomersOrders模型都是工匠生成的骨架,因此我无所适从。

例如:

class Customer extends \Eloquent {

// Add your validation rules here

public static $rules = [

// 'title' => 'required'

];

// Don't forget to fill this array

protected $fillable = [];

}

这是当我对种子(最初由Faker生成)的第一个口才查询dd()时输出的数组:

protected $original =>

array(25) {

'id' =>

NULL

'first_name' =>

NULL

'last_name' =>

NULL

'email' =>

string(24) "luther.braun@example.org"

'phone' =>

string(17) "642.150.9176x5684"

'address1' =>

NULL

'address2' =>

NULL

'city' =>

NULL

'state' =>

NULL

'county' =>

NULL

'district' =>

NULL

'postal_code' =>

NULL

'country' =>

NULL

'notes' =>

NULL

'created_at' =>

NULL

'updated_at' =>

NULL

'customer_id' =>

NULL

'total' =>

NULL

}

回答:

可以通过指定特定表中所需的特定列名来解决,如下所示:

$c = Customer::leftJoin('orders', function($join) {

$join->on('customers.id', '=', 'orders.customer_id');

})

->whereNull('orders.customer_id')

->first([

'customers.id',

'customers.first_name',

'customers.last_name',

'customers.email',

'customers.phone',

'customers.address1',

'customers.address2',

'customers.city',

'customers.state',

'customers.county',

'customers.district',

'customers.postal_code',

'customers.country'

]);

以上是 Laravel雄辩的LEFT JOIN WHERE NULL 的全部内容, 来源链接: utcz.com/qa/410097.html

回到顶部