我目前正在浏览Laravel Documentation,而且我对关系部分有点困惑,主要是一对多查询。
目前我有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');
现在在我的客户模型中,我有以下假设从路径部分获取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的订单吗?感谢。
答案 0 :(得分:0)
问题是数据库中的密钥。由于主键是ID
而不是id
,因此我需要在hasMany
中将其指定为第三个参数。所以在模型中,它应该看起来像:
class Customer extends Model
{
public function orders() {
return $this->hasMany('App\Order', `cust_id`, `ID`);
}
}
将ID
更改为id
可能更容易,但我当然认为它不会产生影响甚至真正考虑它的影响。