Laravel 5 eloquent关系返回空或null但代码似乎没问题

时间:2016-09-20 15:35:39

标签: php database laravel eloquent relation

我做了一些搜索,但我仍然无法解决这个问题,我正在编写一个小型图书馆网站进行学习,而且我无法找到工作关系。 (libro = book,autore = author,genere = genre)

在我修补命令

$libro->autore

返回null或empty,即使我将其称为方法并使用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');
    }
}

自动模特

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

1 个答案:

答案 0 :(得分:1)

您关系中列的命名约定不正确(向后)。惯例是${related_table}_id

要解决此问题,请更改您的迁移。但是,如果您不想仅调整迁移,请将Autore模型中的外键列指定为hasMany关系的第二个参数。

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

并确保对Libro模型执行反转。