我有两个型号公告:
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。我无法理解,为什么......
答案 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