Laravel很多关系都不起作用

时间:2018-02-10 12:16:09

标签: laravel many-to-many laravel-5.5

我尝试从关系中获取数据,但只返回关系属性。

用户模型

class User extends Authenticatable { 
      use SoftDeletes; use Notifiable; 

       /** 
        * The attributes that are mass assignable. 
        * 
        * @var array 
        */ 
        protected $fillable = [ 'name', 'email', ]; 

       /* 
        * The attributes that should be hidden for arrays. 
        * 
        * @var array 
        */ 
       protected $hidden = [ 'password', 'remember_token' ]; 

       /* 
        * Get the images for the store. 
        */ 
        public function stores() { 
            return $this->belongsToMany('App\Store', 'store_user'); 
        }
}

商店模型

public function users() {
    return $this->belongsToMany('App\User');
}

数据透视表

public function up() {
    Schema::dropIfExists('store_user');
    Schema::create('store_user', function (Blueprint $table) {
        $table->increments('id');
        $table->integer('store_id');
        $table->integer('user_id');
        $table->timestamps();
    });
}

数据透视表和id之间的现有关系是准确的。

检索关系

$user = Auth::user();
$userStores = $user->stores;
$storesID = [];
foreach ($userStores as $store) {
    $storesID[] = $store->id;
}
$builder->whereIn('store_id', $storesID);

返回:

  

未定义的属性:App \ User :: $ stores

我试过

$userStores = $user->stores()->get();

但是冻结页面直到它抛出一个请求超过60秒的错误。

你知道我做错了什么吗?

2 个答案:

答案 0 :(得分:1)

问题是OwnerScope文件中的100%问题,您应首先查看该文件,然后查看您指定$builder值的行,我无法提供更多帮助,因为您没有包含来自任何一方的代码所以我们可以做的就是更新你的问题并同时包括两者。

答案 1 :(得分:0)

看起来$ user未登录,可能先检查:

if (Auth::check()) {

}