【问题标题】:How to use join in Laravel Eloquent?如何在 Laravel Eloquent 中使用 join?
【发布时间】:2016-09-28 07:04:08
【问题描述】:

我有以下两张表。

users - id,name,title
posts - id,author

在哪里post.author = user.id

我的 Post 模型如下。

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function users()
    {
       return $this->belongsTo('App\User');
    }
}

我用Project::find(1)->users

但它给出了以下错误。

SQLSTATE[42S02]: Base table or view not found.

有人可以帮忙吗?

【问题讨论】:

  • 不应该是:Post::find(1)->users?
  • 您需要阅读docs。默认情况下,Laravel 假定 posts 表中的 id 为 user_id。如果你想使用author 列名,那么你可以在你的User 模型中覆盖它。
  • @Daan 是的,它是。改变它。但不起作用。
  • 谢谢@Krik Bread。是这样吗? return $this->hasManyThrough('App\Post', 'author');

标签: php laravel-5.1


【解决方案1】:

您可以将代码更改为:

class Post extends Model
{
    public function user()
    {
       return $this->hasOne('App\User', 'id', 'author');
    }
}

这将通过调用Post::find(1)->user->id从数据库中获取用户。

我建议将users 更改为user,因为帖子只能有一个作者。

希望这行得通!

【讨论】:

  • Post::find(1)->user->来自 PostController 的 id 调用。但它不起作用。
  • SQLSTATE[42S02]:未找到基表或视图:1146 表“用户”不存在(SQL:从 users 中选择 * users.author in (1) )
  • 哦,我明白了,参数的顺序错误...我更新我的答案!
  • 感谢@Robin Dirksen 现在它返回字符串(1)“1”而不是对象
【解决方案2】:

这应该改变

Project::find(1)->users

到这里

Post::find(1)->users

阅读本文

  1. Base table or view not found: 1146 Table Laravel 5

【讨论】:

    【解决方案3】:

    您的帖子模型..

    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model
    {
        public function users()
        {
           return $this->belongsTo('App\User', 'author');
        }
    }
    

    现在把它当作..

    Post::find(1)->users;
    

    由于帖子只有一个创建者,您可以将 Post 模型上的 users 方法更改为 user 并将其用作

    Post::find(1)->user;
    

    【讨论】:

      猜你喜欢
      • 2023-02-01
      • 2014-11-17
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      • 2014-08-19
      • 1970-01-01
      • 2014-06-13
      • 2015-07-20
      相关资源
      最近更新 更多