0

私は2つのモデルを持っています

 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');
}
}

2 つのテーブルがあります。

 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を取得しました。理解できない、なぜ...

4

2 に答える 2

1

$this->hasMany('Characteristic', 'announcement_id'); を返す必要があります。

あなたはリターンを逃しています。

于 2013-09-26T12:26:23.053 に答える
0

このようにしてみてください:

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

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

関数名はテーブルの名前です。最初のパラメーターはモデル名、2 番目のパラメーターは一致するキー名です。

また、良い習慣として、外部キーを announcement_id に追加します

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

次のようなクエリも試してください。

$test = Announcement::find(1)->characteristics; //not a method name
于 2013-09-26T11:59:02.870 に答える