2016-09-20 7 views
0

Я сделал несколько поисков, но все же я не могу это решить, я кодирую небольшой сайт библиотеки для обучения, и я не могу заставить отношения работать. (Забронировать = книга, Autore = автор, жанры = жанр)Laravel 5 eloquent relationship возвращает пустое или нулевое значение, но код выглядит нормально

В моем повозиться команда

$libro->autore 

возвращает нуль или пустой, даже если я буду называть его как метод и использовать ToArray

это мой код:

Libro модель

namespace App; 

использование Illuminate \ Database \ Eloquent \ Model;

class Libro extends Model 
{ 
    protected $table = 'libri'; 
    protected $fillable = ['titolo', 'id_autore', 'pubblicazione', 'trama', 'voto', 'image_url', 'id_genere']; 
    public function genere() { 
     return $this->belongsTo('App\Genere'); 
    } 

    public function autore() { 
     return $this->belongsTo('App\Autore'); 
    } 
} 

Autore Модель

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Autore extends Model 
{ 
    protected $table = 'autori'; 
    protected $fillable = ['nome', 'cognome', 'nascita', 'paese']; 

    public function libri() { 
     return $this->hasMany('App\Libro'); 
    } 
    public function getFullNameAttribute() 
    { 
     return $this->nome . " " . $this->cognome; 
    } 
} 

Соотношение в моей миграции

$table->foreign('id_autore')->references('id')->on('autori'); 
$table->foreign('id_genere')->references('id')->on('generi'); 

Я добавил внешние ключи в БД MySQL, проверить, что на PHPMyAdmin, но до сих пор, это не работает, что я делаю неправильно?

** добавить больше ответов Тинкеров попробовать ауты ** Если я стараюсь:

>>> App\Autore::find(2)->libri()->get() 

я получаю:

Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'libri.autore_id' in 'where clause' (SQL: select * from `libri` where `libri`.`autore_id` = 2 and `libri`.`autore_id` is not null)' 

Если я пытаюсь:

$libro-autore() 

Я получаю :

BadMethodCallException with message 'Call to undefined method Illuminate\Database\Query\Builder::autore()' 

вместо

$libro->autore 

остается

null 
+0

Вы можете добавить логику контроллера. – Carlos

+0

Я использую tinker для показа содержимого, я не понимаю, в чем смысл вставки контроллера, который только делает вещи для просмотров – K3nzie

+0

вы пробовали $ libro-> autore() – Carlos

ответ

1

Вашего соглашение об именовании на столбцах в отношении неверно (в обратном направлении). Конвенция - ${related_table}_id.

Чтобы решить эту проблему, измените свою миграцию. В противном случае, если вы не хотите просто корректировать перенос, укажите столбец внешнего ключа в своей модели Autore в качестве второго аргумента для вашего отношения hasMany.

public function libri() { 
    return $this->hasMany('App\Libro', 'id_autore') 
} 

И не забудьте сделать обратное для Libro модели.

+0

Так что внешние ключи не устанавливают его автоматически? Я думал, что сочетание ссылок -> foreign и -> было бы установлено, что – K3nzie

+0

Схема базы данных и шаблон модели не знают друг друга. Вы должны прямо сказать им, как общаться. – Ohgodwhy

+0

Также мне жаль, но tinker по-прежнему возвращает пустые массивы, а $ libro-> autore по-прежнему получает нуль – K3nzie

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

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