Php 如何在laravel中用雄辩的ORM编写内部连接?
我有一个名为Php 如何在laravel中用雄辩的ORM编写内部连接?,php,laravel,laravel-4,Php,Laravel,Laravel 4,我有一个名为建筑物和公寓 建筑物表 Building_Id | Building_Name | .......| Building_Owned_By | .... Flat_Id | Flat_Name | ........| Fk_Building_Id | ..... 扁平表 Building_Id | Building_Name | .......| Building_Owned_By | .... Flat_Id | Flat_Name | ........| Fk_Buildin
建筑物
和公寓
建筑物表
Building_Id | Building_Name | .......| Building_Owned_By | ....
Flat_Id | Flat_Name | ........| Fk_Building_Id | .....
扁平表
Building_Id | Building_Name | .......| Building_Owned_By | ....
Flat_Id | Flat_Name | ........| Fk_Building_Id | .....
在我的模型中
建筑
class Building extends Eloquent {
protected $primaryKey = "Building_Id";
protected $table = 'buildings';
.......
.......
public function flat()
{
return $this->hasMany('Flat', 'Fk_Building_Id', 'Building_Id');
}
}
平坦
class Flat extends Eloquent {
protected $primaryKey = "Flat_Id";
protected $table = 'flats';
.......
.......
public function building() {
return $this->belongsTo('Building','Fk_Building_Id', 'Building_Id');
}
}
在我的控制器里
$flats = Flat::where('Fk_Building_Id', '=',$buildingid)
->where('Building_Owned_By', '=',Auth::user()->Login_Id)
->orderBy('Flat_Name')
->get(array('Flat_Id as flatId', 'Flat_Name as flatName'))
->toArray();
但它什么也不返回
如何在雄辩的Orm中执行内部联接(我不想使用fluent查询)
更新
Building_Id | Building_Name | .......| Building_Owned_By | ....
Flat_Id | Flat_Name | ........| Fk_Building_Id | .....
感谢@Creator的宝贵时间和帮助。他帮了我很多忙找到了这个。解决方案是我们必须使用,并将代码重写为
$flats = Flat::whereHas('building', function($q){
$q->where('Building_Owned_By', '=',Auth::user()->Login_Id);
})
->where('Fk_Building_Id', '=',$buildingid)
->orderBy('Flat_Name')
->get(array('Flat_Id as flatId', 'Flat_Name as flatName'))
->toArray();
这样做:
class Building extends Eloquent {
protected $primaryKey = "Building_Id";
protected $table = 'buildings';
.......
.......
public function flat()
{
return $this->HasMany('Flat', 'Fk_Building_Id', 'Building_Id');
}
}
查询以获取包含所有公寓的建筑:
Building::with('flat')->(some_condition)->get();
class Flat extends Eloquent {
protected $primaryKey = "Flat_Id";
protected $table = 'flats';
.......
.......
public function building() {
return $this->HasOne('Building','Fk_Building_Id', 'Building_Id');
}
}
查询以获取包含建筑信息的平面
Flat::with('building')
->where('Building_Owned_By', '=',Auth::user()->Login_Id)
->orderBy('Flat_Name')
->get(array('Flat_Id as flatId', 'Flat_Name as flatName'))
->toArray();
试试这个:
Flat::with(array('building'=>function($query){
$query->where('Building_Owned_By', '=',Auth::user()->Login_Id)
}))->where('Fk_Building_Id', '=',$buildingid)->orderBy('Flat_Name')
->get(array('Flat_Id as flatId', 'Flat_Name as flatName'))->toArray();
每个公寓都有一个buildingId,也可能有两个公寓有相同的buildingId。我的意思是每个建筑不包含任何平面。这意味着一套公寓只能有一栋楼。所以有人应该工作。你试过上面的代码吗?是的…我也试过上面的代码。它返回空值?如何查看任何sql错误或类似的内容您需要从php.ini打开错误报告。再检查一下答案。@manuthalasseril,没问题,伙计!享受拉威尔!!做事要循序渐进,避免出错。这是代码的关键。干杯