Laravel 模型关联基础教程详解(3)
这样,供应商模型可以访问产品的历史记录条目。
查询关联
查询一个关联非常简单。因为我们定义了 Passport 的一对一关联和 Invoice 的一对多关联,所以我们可以在 User 模型中使用它们。在 User 模型的每个实例上,我们都可以得到对应的 Passport 和 Invoice。
<?php $user = \App\User::find(1); // 查询 passport 关联 $user->passport->expiration_date; // 查询 invoice 关联 foreach($user->invoices as $invoice) { $invoice->total_amount; }
也可以查询关联的反向关联。 如果您有账单,则可以获得该账单的用户。
<?php $invoice = \App\Invoice::find(1); // Get the user $invoice->user->first_name;
查询多对多关联的工作方式与其他关联完全相同。 此外,多对多关联有一个pivot 属性。 此属性表示中间表,可以像任何其他模型一样使用。
举个例子,假设连接的表有 created_at 字段,我们就可以使用 pivot 来获取 created_at 字段。
<?php $invoice = \App\Invoice::find(1); // 获取 product 的 `created_at` 字段 foreach($invoice->products as $product) { $product->pivot->created_at; }
查询 has one through 和 has many through 的工作方式与其他关联完全相同。
添加约束
可以在查询时向关系添加约束。看看下面的示例:
<?php $user->passport()->where('active', 1)->orderBy('expiration_date');
检查关联是否存在
有时候你希望检查模型中是否有添加某些关联, Laravel有一些方法可以帮助你用来检查:
<?php // 找到拥有护照的所有用户 $users = App\User::has('passport')->get(); // 找到没拥有护照的所有用户 $users = App\User::doesntHave('passport')->get(); // 找到拥有 5 个及以上产品的发票 $invoices = App\Invoice::has('products', '>=', 5)->get();
希望这篇文章能让你对Laravel的模型关联有更好的理解。谢谢你的阅读!也希望大家多多支持黑区网络。