关系中的where子句 - laravel

时间:2016-10-12 13:17:31

标签: laravel laravel-5

我有3个这样的模型:

WarehousePivotCategory:

 id - warehouse_id - warehouse_category_id

仓库:

title

WarehouseCategory:

 title_en

我在hasOne内创建了2个WarehousePivotCategory关系,但效果很好:

  public function Warehouse()
  {
  return $this->hasOne('App\Models\Warehouse','id','warehouse_id');
  }

  public function WarehouseCategory()
  {
  return $this->hasOne('App\Models\WarehouseCategory','id','warehouse_category_id');
  }
数据库中的

我在warehouses表中有两条记录:

  id title
  1 AA
  2 BB

我想在warehouses中搜索标题:

$title = 'AA';



$warehouses = WarehousePivotCategory::with(['warehouse' => function($q) use ($title) {
    $q->where('title', 'like', '%' . $title . '%');
},'WarehouseCategory'])->get();


    foreach ($warehouses as $w)
    {
        echo $w->warehouse->title; // no thing

    }

但它并没有返回任何title个仓库。

我的关系是正确的,因为下面的代码工作正常:

WarehousePivotCategory::with('warehouse','WarehouseCategory')->paginate(10);

2 个答案:

答案 0 :(得分:1)

我认为你在关闭时缺少get方法。试试这样:

    $warehouses = WarehousePivotCategory::with(['warehouse' => function($q) use ($title) {
$q->where('title', 'like', '%' . $title . '%')->get(['id', 'title']); },'WarehouseCategory'])->get();

您还可以发送要获取的字段数组来获取方法,如下所示:

public float GetMoneyPerSec()
{
    float tick = 0;
    foreach (UpgradeManager item in items)
    {
        tick += item.tickValue;
    }
    return tick;
}

答案 1 :(得分:0)

那是错的。在创建pivot时,您不需要使用hasone。您需要使用BelongsToMany

class warehouse extends Model{

   public function ware_cat(){
       return $this->BelongsToMany('App\Models\WarehouseCategory');
   }
   public function getWarehouse(){
       $this->with('ware_cat')->get();
   }
}

数据透视表将获取它,因此在仓库模型中您将获得其类别,在类别模型中,您将以相同的方式获得仓库,反之亦然。