gpt4 book ai didi

php - Laravel 模型的多列 "pivot"表查询

转载 作者:行者123 更新时间:2023-11-29 12:02:37 25 4
gpt4 key购买 nike

在查看 laravel 文档和 stackoverflow 两天但没有成功后,我不得不问这个问题

到目前为止我有 4 个模型,我正在尝试一次性获取所有相关信息。

用户模型有关系:

public function transactions() {
return $this->hasMany( 'App\Transaction' );
}

商店模型有关系::

public function transactions() {
return $this->hasMany( 'App\Transaction' );
}

产品型号有关系::

public function transactions() {
return $this->hasMany( 'App\Transaction' );
}

最后交易模型有关系:

public function user() {
return $this->belongsToMany( 'App\User' );
}
public function product() {
return $this->belongsToMany( 'App\Product' );
}
public function store() {
return $this->belongsToMany( 'App\Store' );
}

交易表(看起来像数据透视表):

transactions:
id - integer
user_id : integer
product_id : integer
store_id : integer
....... some additional columns containing transaction specific data.

我想获取所有带有身份验证用户引用详细信息的交易

又名“$user->transactions”,但是这样我只得到 id,没有从相关表中得到数据。我确实尝试过加入,但看起来很困惑,我认为有更好的方法可以在 laravel 中很好地构造这些数据

连接看起来像:

   $transactions = DB::table( 'transactions as t' )->where( 'user_id', Auth::id() )
->join( 'products', 'products.id', '=', 't.product_id' )
->join( 'stores', 'stores.id', '=', 't.store_id' )
->get( array( 't.id', 't.product_id', 'products.name as product_name', 't.store_id', 'stores.name as store_name' ) );

我的目标是使用尽可能少的查询,以一个 JSON 响应的形式获取包含用户所有信息(包括交易和其他详细信息)的用户对象。

最佳答案

您只需将关系中所需的值附加到交易中即可。首先将它们作为属性添加到事务模型上,如下所示:

public function getProductNameAttribute()
{
return $this->product?$this->product->name:"";
}

public function getStoreNameAttribute()
{
return $this->store?$this->store->name:"";
}

现在,您可以将它们附加到事务模型中的事务中,如下所示:

protected $appends = ['product_name','store_name'];

并像往常一样检索交易,如下所示:

Auth::user()->transactions;

或者在运行时将它们附加到事务中(第一步之后),如下所示:

Auth::user()->transactions()->setAppends(['product_name','store_name'])->toArray();

关于php - Laravel 模型的多列 "pivot"表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32117104/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com