[英]Laravel One to Many Relationships Query
我目前正在阅读Laravel文档,并且在“关系”部分有些停留,主要是“一对多”查询。
目前我有2张桌子,一张用于customers
,另一张用于orders
。 我的最终目标是获取所有值,其中orders.cust_id = customers.id
。 他们具有外键关系。
我尝试遵循文档,但将其实现到控制器中。 所以我最终得到了这样的东西:
class CustomerController extends Controller
{
public function customer($id)
{
$orders = Customer::find($id)->orders;
echo $orders;
echo '<ul>';
foreach($orders as $order)
{
echo '<li>' . $order->name . '</li>';
}
echo '</ul>';
}
}
在路由中,我使用它来连接控制器Route::get('customer/{id}', 'CustomerController@customer');
现在在我的客户模型中,我假设以下内容来自于route部分的id参数。
class Customer extends Model
{
public function orders()
{
return $this->hasMany('App\Order', 'cust_id');
}
}
尽管表已正确填充,但返回的只是[]
。 然后,我尝试仅通过使用routes选项(没有控制器)来简化它
Route::get('customer/{id}', function($id) {
$orders = App\Customer::find($id)->orders;
echo $orders;
});
但我得到相同的输出。 但是,我可以做文档的反面部分,并检索订单的客户信息。
Route::get('orders', function() {
$orders = App\Order::all();
foreach ($orders as $order) {
echo $order->name . " for " . $order->customer['name'] . "<br/>";
}
});
class Order extends Model
{
public function customer() {
return $this->belongsTo('App\Customer');
}
}
有人可以指出正确的方向,以便我可以使用提供的客户ID检索所有订单吗? 谢谢。
问题是数据库中的密钥。 因为主键是ID
而不是id
,所以我需要在hasMany
中将其指定为第三个参数。 因此,在模型中,它应该看起来像:
class Customer extends Model
{
public function orders() {
return $this->hasMany('App\Order', `cust_id`, `ID`);
}
}
仅将ID
更改为id
可能会更容易,但我当然不认为这会有所作为,甚至没有真正考虑其影响。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.