Database 使用作用域对关系进行Laravel筛选
我有以下型号: 订单和订单状态 在订单模型中,我定义了关系:Database 使用作用域对关系进行Laravel筛选,database,laravel,eloquent,belongs-to,Database,Laravel,Eloquent,Belongs To,我有以下型号: 订单和订单状态 在订单模型中,我定义了关系: public function fullState() : ?BelongsTo { return $this->belongsTo(OrderState::class, 'order_state_id', 'id'); } 我要做的是获取所有具有特定OrderState的订单。我已经在Order类中创建了作用域方法 在我的OrderState类中,我有以下具有作用域的方法: p
public function fullState() : ?BelongsTo
{
return $this->belongsTo(OrderState::class, 'order_state_id', 'id');
}
我要做的是获取所有具有特定OrderState的订单。我已经在Order类中创建了作用域方法
在我的OrderState类中,我有以下具有作用域的方法:
public function scopeNotCancelled(Builder $query) : Builder
{
return $query->where('key', '<>', self::CANCELLED);
}
public function scopeNotPostponed(Builder $query) : Builder
{
return $query->where('key', '<>', self::POSTPONED);
}
我做错了什么,有人看得出来吗?这就是我看到的错误
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Order.order_state_id' in 'where clause' (SQL: select * from `Order` where exists (select * from `OrderState` where `Order`.`order_state_id` = `OrderState`.`id` and `key` <> CANCELLED) and exists (select * from `OrderState` where `Order`.`order_state_id` = `OrderState`.`id` and `key` <> POSTPONED) and `order_state_id` <> 0)
若遵循Laravel命名约定,则表名应为Orders而不是Order。也许这就是为什么会出现未知列错误的原因。另一个提示是,不要执行?BelongsTo,例如,关系fullState将始终返回BelongsTo,它将永远不会为null。它可以为null的是该关系的数据,因此$model->fullState可以为null,但$model->fullState永远不会为null。
$salesOrders = SalesOrder::notCancelled()
->notPostponed()
->get()
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Order.order_state_id' in 'where clause' (SQL: select * from `Order` where exists (select * from `OrderState` where `Order`.`order_state_id` = `OrderState`.`id` and `key` <> CANCELLED) and exists (select * from `OrderState` where `Order`.`order_state_id` = `OrderState`.`id` and `key` <> POSTPONED) and `order_state_id` <> 0)