【发布时间】:2017-03-16 00:06:52
【问题描述】:
我现有的数据库中有以下表结构: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');
}
}
当我尝试使用 tinker 从 ID=67 的 main 获取记录时,例如:
$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 中得到了预期的结果。
这是什么原因,我该如何解决?
【问题讨论】:
标签: laravel laravel-5 eloquent many-to-many