在laravel

时间:2018-01-23 07:33:49

标签: php laravel eloquent has-many

我有两种型号国家和州。 它们之间的关系如下: 国家:

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

州:

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

现在,我想要在show方法中获取属于该国家/地区的状态。

public function show(Country $country)
{
    $states = $country->States()->get();
    dd($states);
}

但是,这里会抛出一个错误: SQLSTATE [42S22]:找不到列:1054未知列' states.country_id'在' where子句' (SQL:从states中选择{statescountry_id = 11和statescountry_id不为空)

country_id不存在是正确的,因为它被命名为countries_id 因为国家/地区的表格名称是国家/地区。

请帮助解决此错误。

2 个答案:

答案 0 :(得分:1)

将外键添加到关系定义中:

return $this->hasMany('App\State', 'countries_id');

https://laravel.com/docs/5.5/eloquent-relationships#one-to-many

答案 1 :(得分:1)

您的foreign key不匹配,请在second函数中将外键列添加为relationship参数。

public function States()
{
  return $this->hasMany('App\State','countries_id');
}

convention,Eloquent获取拥有模型的"snake case"名称,suffix_id作为foreign key作为country_id。这就是它countries_id而不是func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? { return nil } 的原因。