在拉拉维尔没有工作关系

时间:2013-09-26 11:43:34

标签: laravel eloquent relationships

我有两个型号公告:

 class Announcement extends Eloquent {

    public function characteristics() {
    $this->hasMany('Characteristic');
    }

}

和特点:

class Characteristic extends Eloquent {
protected $guarded = array();

public static $rules = array();

public function announcement() {
    return $this->belongsTo('Announcement');
}
}

有两张桌子:

 CREATE TABLE characteristics (
   id integer PRIMARY KEY AUTOINCREMENT,
   title varchar DEFAULT('Количество'),
   announcement_id integer,
   count integer DEFAULT('0'),
   value_name varchar DEFAULT('шт.'),
   created_at datetime,
   updated_at datetime,
   deleted_at datetime
 );

 CREATE TABLE announcements (
   id integer PRIMARY KEY AUTOINCREMENT,
   title varchar DEFAULT(''),
   description varchar DEFAULT(''),
   created_at datetime,
   updated_at datetime,
   deleted_at datetime
 );

他们都有一些测试数据。

这是我在routes.php中的代码:

 Route::get('/', function()
 {
    $test = Announcement::find(1)->characteristics();

    var_dump($test);
 });

但我总是得到NULL。我无法理解,为什么......

2 个答案:

答案 0 :(得分:1)

你必须返回$ this-> hasMany('Characteristics','announcement_id');

你错过了回归。

答案 1 :(得分:0)

试试这样:

public function characteristics() {
    return $this->hasMany('Characteristic','announcement_id');
}

public function announcement() {
    return return $this->belongsTo('Announcement','announcement_id');
}

函数名称是表的名称。第一个参数是模型名称,第二个参数是匹配的键名称。

另外,对于良好实践,请将一个外键添加到announcement_id

$table->foreign('announcement_id')->references('id')->on('announcements')->onDelete('cascade');

还可以尝试查询:

$test = Announcement::find(1)->characteristics; //not a method name