Laravel一对多的模特关系不起作用

时间:2017-04-12 21:08:11

标签: php laravel laravel-5 one-to-many

我有一个Booking模型,可以有很多Service个。

我在Booking模型中定义了这样的关系:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Service;

class Booking extends Model
{

    /**
     * Get the services for the booking.
     */
    public function services()
    {
        return $this->hasMany('App\Service');
    }
}

然后在我的BookingController我尝试获得当前预订的所有服务:

    public function create()
    {       
        $services = Booking::find(1)->services;
        return view('bookings.create');
    }

我一直收到错误:

  

尝试获取非对象的属性

不确定我在这里做错了什么。外键关系都设置得很好。我在booking_id表中有一个services列,引用了id表上的bookings

任何帮助都将不胜感激。

3 个答案:

答案 0 :(得分:1)

在这种特殊情况下,问题可能是Eloquent无法找到id == 1的预订。

Booking::find(1);将查询预订1的主键。如果未找到,则会返回null。尝试将null用作对象是“尝试获取非对象属性”错误。

答案 1 :(得分:0)

如果您的密钥不是laravel模型生成的密钥,您可以尝试指定它们:

return $this->hasMany('App\Service', 'foreign_key', 'local_key');

答案 2 :(得分:0)

public function create()
    {       
        $services = Booking::find(1)->services;
        return view('bookings.create');
    }

通过查看上面的代码:确保您拥有ID为1的记录。如果是,请检查您的主键和外键。