Laravel一对多关系查询

时间:2017-06-10 11:41:16

标签: php mysql laravel

我目前正在浏览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的订单吗?感谢。

1 个答案:

答案 0 :(得分:0)

问题是数据库中的密钥。由于主键是ID而不是id,因此我需要在hasMany中将其指定为第三个参数。所以在模型中,它应该看起来像:

class Customer extends Model
{
    public function orders() {
        return $this->hasMany('App\Order', `cust_id`, `ID`);
    }
}

ID更改为id可能更容易,但我当然认为它不会产生影响甚至真正考虑它的影响。