【问题标题】:Relationship returning NULL返回 NULL 的关系
【发布时间】:2019-05-17 12:58:37
【问题描述】:

我对 Laravel 很陌生。 我想显示我需要的数据,并且我创建了与我的表的关系,但它不起作用。你能找出我的错误吗?

我有两个表 UsersPlaces

用户模型

protected $fillable = array('name', 'email', 'password','role','places_id');

public function places(){
     return $this->belongsTo('App\Places');
}

地点模型

protected $fillable = array('name','email','phone','address','bio');

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

控制器

 $users = User::with('Places')->get();
 return view('/dashboard')->with('users',$users);

输出是

Collection {#121 ▼
  #items: array:3 [▼
    0 => User {#322 ▶}
    1 => User {#323 ▶}
    2 => User {#324 ▼
      #fillable: array:5 [▶]
      #hidden: array:2 [▶]
      #connection: "mysql"
      #table: "users"
      #primaryKey: "id"
      #keyType: "int"
      +incrementing: true
      #with: []
      #withCount: []
      #perPage: 15
      +exists: true
      +wasRecentlyCreated: false
      #attributes: array:10 [▶]
      #original: array:10 [▶]
      #changes: []
      #casts: []
      #dates: []
      #dateFormat: null
      #appends: []
      #dispatchesEvents: []
      #observables: []
      #relations: array:1 [▼
        "Places" => null
      ]
      #touches: []
      +timestamps: true
      #visible: []
      #guarded: array:1 [▶]
      #rememberTokenName: "remember_token"
    }
  ]
}

【问题讨论】:

  • 那么到底是什么不起作用?从我站的地方看,一切似乎都很好。
  • 关系“Places”返回NULL,我希望它返回数据

标签: php mysql laravel web eloquent


【解决方案1】:

我认为你们已经交换了关系。反之亦然:

用户模型:

public function places()
{
     return $this->hasMany('App\Places');
}

User 具有外键 places_id,因此 User 不属于某个地点,但 个地点。

地点模型:

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

一个地方没有用户,而是属于一个用户。我知道一开始会让人困惑,但你肯定会掌握它的窍门!你可以使用这个“技巧”来帮助你(至少我一直这么记得):

模型名称“关系”函数名称


原帖新评论后的添加/更新(带外键):

用户模型:

public function places()
{
     return $this->hasMany('App\Places', 'places_id', 'id');
}

地点模型:

public function users()
{
    return $this->belongsTo('App\User', 'places_id', 'id');
}

关系的格式是('Model Name', 'foreign key', 'local key')

【讨论】:

  • 这给我一个错误 SQLSTATE[42S22]: Column not found: 1054 Unknown column 'places.user_id' in 'where Clause'
  • 您能在原始问题中发布您的表结构吗? (只是为了完整性)。如果您在 users() 函数中以不同方式命名某些列,我认为您需要在 Places 模型中指定外键:return $this->belongsTo('App\User', 'places_id', 'id');
  • 地点表 [id,name,email,phone,address,bio) 用户表 [id,name,email,password,role,places_id)
  • 感谢您提供的信息。我更新了我的答案。你可以试试用它吗?
  • 成功了!谢谢。虽然我没有更改每个函数的 hasMany 和 belongsTo,我只是添加了“外键”和“本地键”。非常感谢。
猜你喜欢
  • 2020-12-24
  • 2014-08-21
  • 2019-07-11
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多