Laravel雄辩,模型中的条件(Constraining Eager Loads)不起作用
问题描述:
Here is My Controller's Code to get Order list with Condition apply in join table
$orders = Order::whereHas('order_carpets', function($q){
$q->where('carpent_no', '1345');
})->get();
Model Code looks something like this
class Order extends Model
{
protected $table = 'orders';
public function order_carpets()
{
return $this->belongsToMany(Order_carpet::class, 'orders', 'id', 'order_carpet_id');
}
public function customers()
{
return $this->belongsToMany(Customer::class, 'orders', 'id', 'customer_id');
}
}
class Order_carpet extends Model
{
public function orders()
{
return $this->hasMany(Order::class);
}
}
The result I'm getting now is all data of table Order
答
The orders
table appears in your main query and your subquery, without aliases.
So where orders.id = orders.id
refers to the same table twice and so is always true.
The problem is the order_carpets
relationship. It's actually a BelongsTo
relationship:
public function order_carpets()
{
return $this->belongsTo(Order_carpet::class, 'order_carpet_id');
}
The same goes for the customers
relationship:
public function customers()
{
return $this->belongsTo(Customer::class, 'customer_id');
}
You should probably rename them to order_carpet
and customer
.