检索一对多关系laravel上的错误

时间:2017-10-12 12:11:49

标签: php laravel

已经学习laravel 4天了,我试图修复这个错误2个小时,我仍然无法解决它。我可以节省一对多的关系,但我无法检索数据,我认为这种关系有问题。我试图使用这一行检索用户的帖子,但我得到的结果不是空用户,而是帖子上的空结果。在类别和帖子上发生同样的事情,这是多对多关系,但我不能保存很多甚至很多。

$users = User::with('posts')->get();

当我使用此错误时出现错误

  

未定义属性:Illuminate \ Database \ Eloquent \ Collection :: posts()

 $users = User::where('user_id','=','2')->get();

 $posts = $users->posts()->get();

继承我的用户模型

use Illuminate\Database\Eloquent\Model;

class User extends Model
{

       protected $primarykey = 'user_id';
        protected $table = 'users';

    public function posts(){
        return $this->hasMany("App\Post");
    }
}

继承我的帖子模型

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{

    protected $primarykey = 'id';
        protected $table = 'posts';

    public function post_validation_rules(){
        return [
                'post_title' => 'required|min:5|unique:posts',
                'post_body' => 'required'
            ];
    }

    public function user(){
        return $this->belongsTo("App\User");
    }

     public function categories(){
        return $this->belongsToMany('App\Category', 'category_id', 'category_id');
    }
}

分类帖子

class Category extends Model
{

    protected $primarykey = 'category_id';
        protected $table = 'categories';

    public function posts(){
        return $this->belongsToMany('App\Post', 'post_id', 'id');
    }
}

Database

Posts Table
id
user_id
post_title
post_body
createad_date
updated_date

Users Table
user_id
username
email
pass
createad_date
updated_date

2 个答案:

答案 0 :(得分:2)

您只能在单个对象上调用关系,而不能在整个集合上调用关系。 $usersUser个对象的集合。

如果您需要单个用户对象,请使用first()函数获取匹配的第一个User对象。

$user = User::where('user_id','=','2')->first();
$posts = $user->posts;

<强>更新 要直接在用户对象中获取帖子,您需要使用with函数:

$user = User::with('posts')->where('user_id','=','2')->first();

答案 1 :(得分:0)

尝试声明表格之间具有关系的字段,例如:

$this->hasMany(App\Post::class, 'user_id', 'user_id');

Laravel正在用户表中搜索字段id,但它不存在。所以用这种方式你会告诉它你看的字段是user_id