Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在laravel中用雄辩的ORM编写内部连接?_Php_Laravel_Laravel 4 - Fatal编程技术网

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,没问题,伙计!享受拉威尔!!做事要循序渐进,避免出错。这是代码的关键。干杯