如何从外键显示多个 value/field?
How do I show multiple value/field from a foreign key?
好吧,我不知道如何表达我的问题,所以请原谅我的问题
我的观点
@forelse ($transaction as $key=>$value)
<tr>
<td class="text-center">{{$key + 1}}</td
<td>{{ $value->transaction_item->item->item_name }}</td>
<td>{{ $value->transaction_item->quantity }}</td>
<td>{{ $value->transaction_item->price }}</td>
<td>{{ $value->total_price }}</td>
<td>{{ $value->created_at }}</td>
<td>{{ $value->updated_at }}</td>
<td>{{ $value->last_updated_by }}</td>
</tr>
@endforelse
我的控制器
$transaction = Transaction::all();
return view('transaction.index', compact('transaction'));
我的模型
// Transaction
protected $table = 'transaction';
protected $guarded = [];
public function transaction_item()
{
return $this->hasOne(TransactionItem::class, 'transaction_id');
}
// TransactionItem
protected $table = 'transaction_item';
protected $guarded = [];
public $timestamps = false;
public function transaction()
{
return $this->belongsTo(Transaction::class, 'transaction_id');
}
public function item()
{
return $this->belongsTo(MasterItem::class, 'master_item_id');
}
Transaction
有 TransactionItem
,后者有多个 item
、quantity
和 price
。如何将其显示到我的 blade 视图中?当我只做 {{$value->transaction_item->item->item_name}}
时,它只显示第一个 item
,quantity
和 price
也一样。我尝试将 TransactionItem
中的 item
关系更改为 belongsToMany
,但随后弹出此错误
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'myDatabase.master_item_id' doesn't exist (SQL: select `master_item`.*, `master_item_id`.`transaction_item_id` as `pivot_transaction_item_id`, `master_item_id`.`master_item_id` as `pivot_master_item_id` from `master_item` inner join `master_item_id` on `master_item`.`id` = `master_item_id`.`master_item_id` where `master_item_id`.`transaction_item_id` = 3)
我不确定是什么导致了这个问题,但是,我没有 table 或名为 transaction_item_id
的列,这是肯定的,我的 table transaction_item
主键是id
这是我的 table 结构
transaction: id(pk), total_price
transaction_item: id(pk), transaction_id(fk), master_item_id(fk), quantity, price
master_item: id(pk), item_name, price
你需要先告诉我们你的 table 结构,table 名称,外键以及它们之间的关系......有些东西不对
你说 TransactionItem 有多个项目,但在你的关系中你有 TransactionItem 属于项目
也在 belongsToMany
第二个参数是 table 名称而不是外键
所以如果你有这个table结构
transactions : id , total_price
items : id , item_name , item_price
transaction_items : id ,transaction_id , item_id
在这种情况下 transaction_items
是一个支点 table 你可以搜索并阅读它
基本上它只将 2 table 连接在一起
你不需要添加关系到 pivot table 模型,你可以直接通过提及它们的 pivot table 来定义 2 tables(交易,项目)之间的关系
你的关系应该是
// Transaction
public function items()
{
return $this->belongsToMany( Item::class, 'transaction_items' , 'transaction_id' , 'item_id' );
}
可见
@foreach($transactions as $key=>$transaction)
{{$transaction->total_price}}
@foreach($transaction->items as $item )
{{$item->item_name}}
@endforeach
@endforeach
----------------------------编辑------------ --------
通常 pivot table 只包含其他 2 个 table 的 id
所以它没有任何有用的数据,它只是作为 [= 之间的桥梁20=] 和 items
transaction -> transaction_item -> items
场景发生在多对多关系中(如果它的 1 to many
或 1 to 1
关系,您可以直接将 table 1 的 id
存储在其他 table 2 )
所以当你定义 belongsToMany
关系时,你直接将 2 个主要的 table 连接在一起并提到枢轴的名称 table 基本上它就像
transaction belongs to many items via transaction_item
// Transaction
public function items()
{
return $this->belongsToMany( Item::class, 'transaction_items' );
}
但是你已经在 transaction_item
table 中存储了除外键 (id) 之外的其他数据,所以这对你不起作用......你需要与 transaction_item
直接相关,如果你想显示 quantity, price
所以在你的情况下你应该定义
// Transaction
public function transaction_item()
{
return $this->hasMany(TransactionItem::class, 'transaction_id');
}
// TransactionItem
public function item()
{
return $this->belongsTo(TransactionItem::class, 'item_id');
}
可见
@foreach($transactions as $key=>$transaction)
{{$transaction->total_price}}
@foreach($transaction->transaction_item $transaction_item)
{{$transaction_item->price}}
{{$transaction_item->quantity}}
{{$transaction_item->item->item_name}}
@endforeach
@endforeach
好吧,我不知道如何表达我的问题,所以请原谅我的问题
我的观点
@forelse ($transaction as $key=>$value)
<tr>
<td class="text-center">{{$key + 1}}</td
<td>{{ $value->transaction_item->item->item_name }}</td>
<td>{{ $value->transaction_item->quantity }}</td>
<td>{{ $value->transaction_item->price }}</td>
<td>{{ $value->total_price }}</td>
<td>{{ $value->created_at }}</td>
<td>{{ $value->updated_at }}</td>
<td>{{ $value->last_updated_by }}</td>
</tr>
@endforelse
我的控制器
$transaction = Transaction::all();
return view('transaction.index', compact('transaction'));
我的模型
// Transaction
protected $table = 'transaction';
protected $guarded = [];
public function transaction_item()
{
return $this->hasOne(TransactionItem::class, 'transaction_id');
}
// TransactionItem
protected $table = 'transaction_item';
protected $guarded = [];
public $timestamps = false;
public function transaction()
{
return $this->belongsTo(Transaction::class, 'transaction_id');
}
public function item()
{
return $this->belongsTo(MasterItem::class, 'master_item_id');
}
Transaction
有 TransactionItem
,后者有多个 item
、quantity
和 price
。如何将其显示到我的 blade 视图中?当我只做 {{$value->transaction_item->item->item_name}}
时,它只显示第一个 item
,quantity
和 price
也一样。我尝试将 TransactionItem
中的 item
关系更改为 belongsToMany
,但随后弹出此错误
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'myDatabase.master_item_id' doesn't exist (SQL: select `master_item`.*, `master_item_id`.`transaction_item_id` as `pivot_transaction_item_id`, `master_item_id`.`master_item_id` as `pivot_master_item_id` from `master_item` inner join `master_item_id` on `master_item`.`id` = `master_item_id`.`master_item_id` where `master_item_id`.`transaction_item_id` = 3)
我不确定是什么导致了这个问题,但是,我没有 table 或名为 transaction_item_id
的列,这是肯定的,我的 table transaction_item
主键是id
这是我的 table 结构
transaction: id(pk), total_price
transaction_item: id(pk), transaction_id(fk), master_item_id(fk), quantity, price
master_item: id(pk), item_name, price
你需要先告诉我们你的 table 结构,table 名称,外键以及它们之间的关系......有些东西不对
你说 TransactionItem 有多个项目,但在你的关系中你有 TransactionItem 属于项目
也在 belongsToMany
第二个参数是 table 名称而不是外键
所以如果你有这个table结构
transactions : id , total_price
items : id , item_name , item_price
transaction_items : id ,transaction_id , item_id
在这种情况下 transaction_items
是一个支点 table 你可以搜索并阅读它
基本上它只将 2 table 连接在一起
你不需要添加关系到 pivot table 模型,你可以直接通过提及它们的 pivot table 来定义 2 tables(交易,项目)之间的关系 你的关系应该是
// Transaction
public function items()
{
return $this->belongsToMany( Item::class, 'transaction_items' , 'transaction_id' , 'item_id' );
}
可见
@foreach($transactions as $key=>$transaction)
{{$transaction->total_price}}
@foreach($transaction->items as $item )
{{$item->item_name}}
@endforeach
@endforeach
----------------------------编辑------------ --------
通常 pivot table 只包含其他 2 个 table 的 id
所以它没有任何有用的数据,它只是作为 [= 之间的桥梁20=] 和 items
transaction -> transaction_item -> items
场景发生在多对多关系中(如果它的 1 to many
或 1 to 1
关系,您可以直接将 table 1 的 id
存储在其他 table 2 )
所以当你定义 belongsToMany
关系时,你直接将 2 个主要的 table 连接在一起并提到枢轴的名称 table 基本上它就像
transaction belongs to many items via transaction_item
// Transaction
public function items()
{
return $this->belongsToMany( Item::class, 'transaction_items' );
}
但是你已经在 transaction_item
table 中存储了除外键 (id) 之外的其他数据,所以这对你不起作用......你需要与 transaction_item
直接相关,如果你想显示 quantity, price
所以在你的情况下你应该定义
// Transaction
public function transaction_item()
{
return $this->hasMany(TransactionItem::class, 'transaction_id');
}
// TransactionItem
public function item()
{
return $this->belongsTo(TransactionItem::class, 'item_id');
}
可见
@foreach($transactions as $key=>$transaction)
{{$transaction->total_price}}
@foreach($transaction->transaction_item $transaction_item)
{{$transaction_item->price}}
{{$transaction_item->quantity}}
{{$transaction_item->item->item_name}}
@endforeach
@endforeach