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等价项始终为表的email
和phone
字段以外的所有内容返回空元素customers
。由于Customers
和Orders
模型都是工匠生成的骨架,因此我无所适从。
例如:
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