如何在laravel的另一个表中获取数据where子句

时间:2020-07-27 05:03:02

标签: php laravel eloquent

我有2个具有关联的表。我想添加where子句,但此where子句在另一个表中。我的桌子是这样的:

pencairan
+----+------------+------------+------------+
| id |  induk_id  |     qty    |    harga
+----+------------+------------+------------+
|  1 |     1      |     10     |    1000
+----+------------+------------+------------+
|  2 |     1      |     20     |    3000
+----+------------+------------+------------+
|  3 |     3      |     10     |    1500
+----+------------+------------+------------+

induk_pencairan
+----+------------+------------+------------+
| id |  rek_id    |     name   |    address
+----+------------+------------+------------+
|  1 |     1      |    somedata|    somedata
+----+------------+------------+------------+
|  2 |     1      |    somedata|    somedata
+----+------------+------------+------------+
|  3 |     3      |    somedata|    somedata
+----+------------+------------+------------+
|  4 |     3      |    somedata|    somedata
+----+------------+------------+------------+

所以我想这样做:

$pencairan = IndukPencairan::with('turunan_belanja')->findOrFail($id);
if (!$pencairan)
abort(404);

$id = $pencairan->id;
$rek = $pencairan->rek_id;

$digunakan = Pencairan::with('induk_pencairan')
->where('induk_pencairan.rek_id' ,$rek)
->whereNotIn('induk_id ', [$id])->sum(DB::raw('harga*qty'));

但是我得到了错误

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'induk_pencairan.rek_id' in 'where clause'
(SQL: select sum(harga*qty) as aggregate from `pencairan` where `induk_pencairan`.`rek_id` = 2 and `induk_id` not in (2))

有人可以帮忙吗?

#在2个表上更新我的模型

在Pencairan型号上

 public function induk_pencairan()
{
    return $this->belongsTo(\App\Models\IndukPencairan::class ,'induk_id');
    
}

2 个答案:

答案 0 :(得分:0)

您只需要join他们...

  $digunakan = Pencairan::with('induk_pencairan')->join('pencairan','pencairan.induk_id','=','induk_pencairan.id')
            ->where('induk_pencairan.rek_id' ,$rek)
            ->whereNotIn('induk_id ', [$id])->sum(DB::raw('harga*qty'));

或者您可以使用whereHas

 $digunakan = Pencairan::with('induk_pencairan')->whereHas('induk_pencairan',function ($query)use($rek)
        {
            $query->where('induk_pencairan.rek_id' ,$rek);
        })
            ->whereNotIn('induk_id ', [$id])->sum(DB::raw('harga*qty'));

答案 1 :(得分:0)

我解决了

 $digunakan = Pencairan::with('induk_pencairan')
    ->whereHas('induk_pencairan', function($query) use ($rek) {
      $query->where('rek_id', $rek);
    })->whereNotIn('induk_id', [$id])->sum(DB::raw('harga*qty'));
相关问题