2013-09-26 1 views
0

У меня есть две модели Объявление:Не работает отношений в Laravel

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. Я не могу понять, почему ...

ответ

1

Вы должны вернуть $ this-> hasMany ('Характеристика', 'announcement_id');

Вам не хватает возврата.

+0

# $% #^$% #^$% # ^% !!!! Ты прав!!! – XenoneX

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 
+0

Нет, я не работаю ... Я добавляю это в свою миграцию properties_table_table: $ table-> foreign ('announcement_id') -> ссылки ('id') -> on ('announcements') -> OnDelete ('каскад'); Бу не имеет никакой разницы. Когда я редактирую это: $ test = Announcement :: find (1) -> характеристики; // не имя метода У меня есть ошибка «Вызов функции-члена getResults() для не-объекта» – XenoneX

 Смежные вопросы

  • Нет связанных вопросов^_^