繁体   English   中英

Laravel一对多关系查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM