我现有的数据库中有以下表结构:
tbl_Grzyby (ID, Nazwa, ...)
- 主表,
tblk_TypGrzyba (ID, TypGrzyba, OrderNo)
- 查询表,
tblm_TypGrzyba (ID_Grzyb, ID_TypGrzyba)
(多对多表)。
我创建了一个grzyby
Eloquent模型类,它有一个自定义属性,定义为:
class grzyby extends Model
{
protected $table = 'tbl_Grzyby';
public function typ_grzyba() {
return $this->belongsToMany('\App\Lookups\typ_grzyba', 'tblm_TypGrzyba','ID_Grzyb', 'ID_TypGrzyba');
}
}
我还创建了查找表模型,定义为:
class typ_grzyba extends Model {
protected $table = 'tblk_TypGrzyba';
public function grzyby() {
return $this->belongsToMany('\App\grzyby', 'tblm_TypGrzyba','ID_Grzyb', 'ID_TypGrzyba');
}
}
当我尝试使用修补程序从主要ID = 67获取记录时,如:
$main_record=\App\grzyby::where('ID',67)->first();
它将该记录的所有细节都归还给我。返回所有查找运行也很好:
$types = \App\Lookups\typ_grzyba::all();
但是,如果我尝试执行以下操作:
$main_record_types = $main_record->typ_grzyba;
当我运行查询日志时,它会在SQL查询后输出:
select `tblk_TypGrzyba`.*, `tblm_TypGrzyba`.`ID_Grzyb` as `pivot_ID_Grzyb`, `tblm_TypGrzyba`.`ID_TypGrzyba` as `pivot_ID_TypGrzyba` from `tblk_TypGrzyba` inner join `tblm_TypGrzyba` on `tblk_TypGrzyba`.`id` = `tblm_TypGrzyba`.`ID_TypGrzyba` where `tblm_TypGrzyba`.`ID_Grzyb` is null
如果我对数据库运行该查询,则返回空结果,但是,如果我手动将where子句更改为
where `tblm_TypGrzyba`.`ID_Grzyb` = 67
我在phpMyAdmin中获得了预期的结果。
它是什么原因以及如何解决这个问题?
答案 0 :(得分:1)
解决方法是添加primaryKey
覆盖,因为我在ID字段中使用大写字母,然后重新启动修补程序。
答案 1 :(得分:0)
你在你的人际关系中混淆了你的外键定义。你写了两次这个:
return $this->belongsToMany('\App\grzyby', 'tblm_TypGrzyba','ID_Grzyb', 'ID_TypGrzyba');
我假设复制粘贴?在第二个模型中,justt交换外键。首先是当前模型的外键。
在typ_grzyba模型中,执行
public function grzyby() {
return $this->belongsToMany('\App\grzyby', 'tblm_TypGrzyba', 'ID_TypGrzyba', 'ID_Grzyb');
}