Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 使用作用域对关系进行Laravel筛选_Database_Laravel_Eloquent_Belongs To - Fatal编程技术网

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)