我的作者模型如下所示:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Author extends Model {
public $timestamps = false;
public function role()
{
return $this->hasOne('App\Role');
}
}
和角色模型看起来像:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Role extends Model {
public $timestamps = false;
}
我的AuthorController.php看起来像:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Author;
class AuthorController extends Controller
{
public function index(){
$role = Author::find(5)->role->pareigos;
return view('authors', ['role' => $role]);
}
}
但我得到的错误如下:
&#34; SQLSTATE [42S22]:找不到列:1054未知列 &#39; roles.author_id&#39;在&#39; where子句&#39; (SQL:select * from
roles
whereroles
。author_id
= 5和roles
。author_id
不是空限制1)
author_id甚至来自哪里?
我在数据库中有两个表,第一个是authors
,它有id,firstname,lastname,role_id。第二个是roles
,有两行 - id和pareigos。所以我使用这个命令:
$role = Author::find(5)->role->pareigos;
按ID(5)查找作者并在roles
表格中检查他的role_id,如果ID匹配则返回pareigos
。
不知道我是否清楚地描述了这个问题 - 如果没有,请告诉我我会添加更多细节。
答案 0 :(得分:2)
您的关系设置不正确。具有指向另一个表的键的表属于该另一个表。
class Author ...
{
public function role()
{
return $this->belongsTo(Role::class);
}
...
这将要在role_id
表上查找authors
键。默认情况下,除非您传递更多参数以覆盖它,否则Laravel使用调用函数名来确定belongsTo
关系的外键名称。 [方法名为role
,因此它知道要查找role_id
... methodname
+ _id
]