我试图访问关系字段值,当我试图这样做时,我得到了错误:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'sub_areas.subarea_id' in 'where clause' (SQL: select * from
{sub_areas {1}} {sub_areas {1}} {subarea_id {1}}
我无法理解为什么要用下划线将其更改为较低的键;
感谢任何帮助。
访问模型:
where
在Model中,主键是:
城市模型:
.
SubArea Model
is null limit 1)
迁移:
$subArea = City::find(1)->subArea;
添加外键:
/**
* Overriding default Primary Key
* @var string
*/
protected $primaryKey = 'SubAreaID';
public function subArea()
{
return $this->belongsTo(SubArea::class);
}
如果我在这个函数中传递外键
CityModel
public function city()
{
return $this->hasMany(City::class);
}
SubArea Model
Schema::create('cities', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('Id');
$table->integer('AreaID')->unsigned();
$table->integer('SubAreaID')->unsigned();
$table->integer('CityID')->unsigned()->index();
$table->string('Title', 50);
$table->string('Latitude', 100);
$table->string('Longitude', 100);
$table->tinyInteger('Active')->unsigned()->default(1);
});
我没有得到任何结果。 但这还有一个问题。
答案 0 :(得分:3)
首先,根据您的迁移,City
模型的主键不是SubAreaID
。它只是Id
。将其分配到SubAreaID
实际上会导致find(1)
查找SubAreaID
为1的列,我不相信您正在尝试这样做。
现在,默认情况下,当您定义belongsTo
关系时,Laravel具有默认命名约定。
按照惯例,Eloquent将采取"蛇案" 拥有模型的名称,并以_id为后缀。 http://laravel.com/docs/5.1/eloquent-relationships
在这种情况下,当您在$this->belongsTo(SubArea::class)
中定义City
时,它会假定您在subarea_id
模型中有City
列。
但是,您可以通过将自定义键作为第二个参数传递来覆盖此行为。
public function subArea()
{
return $this->belongsTo(SubArea::class, 'SubAreaID');
}
同样,在您的SubArea
模型中
public function city()
{
return $this->hasMany(City::class, 'SubAreaID');
}
最后,最后两个关系
CityModel
return $this->hasOne(SubArea::class, 'SubAreaID');
SubArea Model
return $this->belongsToMany(\City::class, 'cities', 'SubAreaID');
不会工作,因为根本不是你的桌子的设置方式。