私は多形関係の問題に直面していて、どこで仕事をすることができないのか。基本的に、適用したい「where」条件があります。リレーションコードは関連モデルを返すために正常に機能していますが、whereHasを適用するとエラーが返されます。
以下はコードです
注文クラス:
class Order extends Model
{
// function to return orders
public static function getAllOrders()
{
return $orders = Order::with('part.pcategory')->whereHas('part', function ($query)
{
$query->where('cat_id',4);
})->get();
}
// the relation
public function part()
{
return $this->morphTo(null,'department_short_code','part_stock_number','stock_number', 'dep_short_code');
}
}
SFDパーツクラス:
class sfd_part extends Model
{
public function orders()
{
return $this->morphMany('App\Order','part','department_short_code','part_stock_number');
}
public function pcategory()
{
return $this->belongsTo('App\Pcategories','cat_id', 'category_id');
}
}
GetAllOrders()を呼び出すと、以下のエラーが発生します
SQLSTATE [42S22]:列が見つかりません:1054不明な列 'cat_id' in'where句 '(SQL:select count(*)as Aggregate from
orders
where presents(select * fromorders
aslaravel_reserved_0
どこlaravel_reserved_0
.id
=laravel_reserved_0
.part_stock_number
およびcat_id
= 2およびlaravel_reserved_0
.id
=laravel_reserved_0
.part_stock_number
およびcat_id
= 2))
データベーステーブルの構造
取得しようとしているデータは、各パーツが関連する注文のリストです。次に、この部分に関連するカテゴリ名を取得します。また、whereHasを使用してこのリストをフィルタリングしたいのですが、たとえば、特定のカテゴリのすべての注文を取得します。
注文テーブルには、パーツにリンクされた注文があります。この部分は3つのテーブルのいずれかに含めることができるため、department_short_codeとpart_stock_numberの2つのキーでポリモーフィックリレーションリレーを使用しました。
WhereHasを使用する際にいくつかの問題があります。この状況は他の方法で処理できますが
エディターでwhereメソッドが見つからない場合がありますが、使用でき、それに応じて機能します。 tosql()を使用して、クエリをさらに確認します。
Order::with('part.pcategory')->where( function ($query) {
$query->whereIn('part_id', function ($query) {
$query->select('id')
->from('sfd_part')
->where('cat_id',4);
});
})->get();