Laravel

时间:2017-12-07 20:33:07

标签: php mysql laravel

我的作者模型如下所示:

<?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 where   rolesauthor_id = 5和rolesauthor_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

不知道我是否清楚地描述了这个问题 - 如果没有,请告诉我我会添加更多细节。

1 个答案:

答案 0 :(得分:2)

您的关系设置不正确。具有指向另一个表的键的表属于该另一个表。

class Author ... 
{
    public function role()
    {
        return $this->belongsTo(Role::class);
    }
    ...

这将要在role_id表上查找authors键。默认情况下,除非您传递更多参数以覆盖它,否则Laravel使用调用函数名来确定belongsTo关系的外键名称。 [方法名为role,因此它知道要查找role_id ... methodname + _id]