Laravel eloquent 关系中的 "key"

The "key" in Laravel eloquent relationship

我有 2 个模型:InvoiceInvoiceItems,这些模型与 invoice_id 相关联:

 Schema::create('invoice_items', function (Blueprint $table) {
            $table->bigInteger('invoice_id')->unsigned();
            $table->foreign("invoice_id")->references('id')->on('invoices')->onDelete('cascade');
});

Invoice :

class Invoice extends Model
{
    protected $fillable = [
        'profile_id',
        'invoice_number',
         ....
    ];

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

InvoiceItems

class InvoiceItem extends Model
{
    protected $guarded = [];

    public function invoice()
    {
        return $this->belongsTo('App\Invoice');
    } 
}

当我想使用 eloquent 获取发票及其发票项目时,我使用以下代码:

$invoice = Invoice::with('invoiceItems')->findOrFail($id);

现在 dd($invoice->toArray()) 的输出是:

array:20 [▼
  "id" => 14
  "profile_id" => 13
  "invoice_number" => null
  ....
  "created_at" => "2020-05-05 09:21:46"
  "updated_at" => "2020-05-09 12:09:14"
  "invoice_items" => array:1 [▼
    0 => array:10 [▼
      "id" => 9
      "invoice_id" => 14
      "price" => "10000.00"
      "created_at" => "2020-05-05 09:21:46"
      "updated_at" => "2020-05-05 09:21:46"
    ]
  ]
]

到目前为止一切看起来都很好,但我很困惑!当我想使用 $invoice->invoice_items 它 returns null 而它存在于顶部 dd($invoice->toArray()) ! 另一方面,当我使用 $invoice->invoiceItems 时效果很好! 现在造成这种差异的原因是什么?

改用$invoice->invoiceItems

我想你可以在关系属性中找到它。

为了数组执行 laravel 逻辑,他们选择将所有内容包含为 kebab_case 以保持数据一致性,但我理解您的困惑。