laravel中单列数组的Where子句

问题描述 投票:0回答:2

我正在laravel 5.5上建立一个小应用程序,我正在检索关系缺失的模型,如下所示:

$milestone =  Milestone::where('unique_id', $request->id)
    ->whereDoesntHave('block')
    ->first();

这工作正常,但当我将milestone变量转换为数组时,我得到了荒谬的结果,我试过:

$milestone =  Milestone::where('unique_id', $request->id)
    ->whereDoesntHave('block', function ($q) use($request){
        foreach($request->milestone as $m)
            $q->where('unique_id', $m);
    })
    ->first();

编辑:

以下是我的关系:

里程碑模型:

public function block()
{
    return $this->morphMany('App\Models\Team\Block', 'block');
}

块模型:

public function block()
{
    return $this->morphTo();
}

和我的块数据库表:

Schema::create('blocks', function (Blueprint $table) {
    $table->increments('id');
    $table->string('unique_id');
    $table->string('block_type');
    $table->integer('block_id');
    $table->integer('generic_id');
    $table->string('type');
    $table->integer('user_id');
    $table->timestamps();
    $table->softDeletes();
});

请帮帮我,谢谢

laravel laravel-5.5 laravel-eloquent
2个回答
0
投票

你应该使用whereIn而不是foreach与多个where条款。即

 $q->whereIn('unique_id', $mArray);

如果你将where条款链接在一起,那些就是AND where条款。举个例子

App\Models\User::where('id', 1)->where('id', 2)->toSql();
"select * from `users` where `id` = ? and `id` = ?"
App\Models\User::whereIn('id', [1,2])->toSql();
"select * from `users` where `id` in (?, ?)"

前者没有给出结果,而后者给出了你可能期望的结果


0
投票

whereDoesntHave()

$milestone =  Milestone::where('unique_id', $request->id);

foreach($request->milestone as $m) {
    $milestone = $milestone->whereDoesntHave('block', function ($q) use($m) {
        $q->where('unique_id', $m);
    });
}

$milestone = $milestone->first();

或者使用whereHas()whereNotIn()

$milestone =  Milestone::where('unique_id', $request->id)
    ->whereHas('block', function ($q) use($request) {
        $q->whereNotIn('unique_id', $request->milestone);
    })
    ->first();
© www.soinside.com 2019 - 2024. All rights reserved.