Php Laravel一对多关系查询

Php Laravel一对多关系查询,php,mysql,laravel,Php,Mysql,Laravel,我现在正在浏览,我有点困在关系部分,主要是一对多查询 目前我有两张桌子,一张是客户桌,另一张是订单桌。我的最终目标是获取orders.cust_id=customers.id的所有值。他们有外键关系 我试着遵循文档,但在控制器中实现了它。所以我最终得到了这样的结果: class CustomerController extends Controller { public function customer($id) { $orders = Customer::fi

我现在正在浏览,我有点困在关系部分,主要是一对多查询

目前我有两张桌子,一张是客户桌,另一张是订单桌。我的最终目标是获取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>';
    }
}
尽管表已正确填充,但它返回的只是[]。然后我尝试通过使用routes选项no controller来简化它

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更容易,但我当然不认为它会产生影响,甚至不考虑它的影响。

这并不重要,但是你正在混合MVC模型、视图和控制器的东西。现在,对于问题,请尝试执行以下操作并告诉输出$customer=customer::查找$id;在下一行dd$customer;。将这两行放在$orders=Customer::find$id->orders;之前;。这是为了看看控制器是否找到了客户是的,它正在找到客户。当前使用返回视图'customer',压缩视图'customer'将其放在视图中;它将显示客户的其他属性,而不是订单。在订单表上是否有相应的客户方法?要查看上次运行的查询,可以使用ddDB::getQueryLog;在$orders=Customer::find$id->orders后添加此行;并检查您的查询是否正确correct@btl是否需要有相反的结果?好吧,这不是必需的
class Customer extends Model
{
    public function orders() {
        return $this->hasMany('App\Order', `cust_id`, `ID`);
    }
}