如何从外键显示多个 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');
    }

TransactionTransactionItem,后者有多个 itemquantityprice。如何将其显示到我的 blade 视图中?当我只做 {{$value->transaction_item->item->item_name}} 时,它只显示第一个 itemquantityprice 也一样。我尝试将 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 many1 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