Laravel 5 eloquent 关系 returns 为空或 null 但代码似乎没问题
Laravel 5 eloquent relationship returns empty or null but the code seems ok
我进行了一些搜索,但仍然无法解决这个问题,我正在编写一个用于学习的小型图书馆网站,但我无法建立关系。 (libro = 书,autore = 作者,genere = 流派)
在我的修补程序中命令
$libro->autore
returns null 或空,即使我将其作为方法调用并使用 toArray
这是我的代码:
图书馆模型
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
您对关系中列的命名约定不正确(向后)。惯例是 ${related_table}_id
.
要解决此问题,请更改您的迁移。否则,如果您不想只调整迁移,请将 Autore
模型中的外键列指定为 hasMany
关系的第二个参数。
public function libri() {
return $this->hasMany('App\Libro', 'id_autore')
}
并确保对 Libro
模型执行逆运算。
我进行了一些搜索,但仍然无法解决这个问题,我正在编写一个用于学习的小型图书馆网站,但我无法建立关系。 (libro = 书,autore = 作者,genere = 流派)
在我的修补程序中命令
$libro->autore
returns null 或空,即使我将其作为方法调用并使用 toArray
这是我的代码:
图书馆模型
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
您对关系中列的命名约定不正确(向后)。惯例是 ${related_table}_id
.
要解决此问题,请更改您的迁移。否则,如果您不想只调整迁移,请将 Autore
模型中的外键列指定为 hasMany
关系的第二个参数。
public function libri() {
return $this->hasMany('App\Libro', 'id_autore')
}
并确保对 Libro
模型执行逆运算。