我正在尝试使用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模型都是工匠生成的骨架,因此我无所适从。
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' ]);