Laravel雄辩,模型中的条件(Constraining Eager Loads)不起作用

时间:2018-03-27 09:09:01

标签: php laravel

以下是我的控制器代码,以获取具有条件的订单列表适用于连接表

$orders = Order::whereHas('order_carpets', function($q){
            $q->where('carpent_no', '1345');
        })->get();

模型代码看起来像这样

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);
    }
}

我现在得到的结果是表Order

的所有数据

1 个答案:

答案 0 :(得分:0)

orders表出现在主查询和子查询中,没有别名 所以where orders.id = orders.id两次引用同一个表,所以总是如此。

问题是order_carpets关系。它实际上是BelongsTo关系:

public function order_carpets()
{
    return $this->belongsTo(Order_carpet::class, 'order_carpet_id');
}

customers关系也是如此:

public function customers()
{
    return $this->belongsTo(Customer::class, 'customer_id');
}

您应该将它们重命名为order_carpetcustomer