繁体   English   中英

laravel中where not in query怎么写?

[英]How to write a where not in query in laravel?

我想在 laravel 中写一个 Where not in query。我在 sql 中写了它工作正常请帮我将查询转换为 laravel。

这是查询...

SELECT * 
FROM `apiaccessauth` 
WHERE `site_name` NOT IN (
                SELECT `site_name` 
                FROM `API_site_access_log` 
                WHERE `created_at` LIKE '%2021-10-15%'
                );

如果你想使用Eloquent,它会像下面这样

Eloquent model

<?php

namespace App\Modules\Vehicle\Models;

use Illuminate\Database\Eloquent\Model;

class ApiAccessAuth extends Model
{
    protected $table = 'apiaccessauth';
}

您的查询

ApiAccessAuth::whereNotIn('site_name', function ($query) {
    $query->from('API_site_access_log')
        ->select('site_name')
        ->whereDate('created_at', '2021-10-15');
})->get();

如果你想使用查询构建器,它会像下面这样

use Illuminate\Support\Facades\DB;

DB::table('apiaccessauth')
    ->whereNotIn('site_name', function ($query) {
        $query->from('API_site_access_log')
            ->select('site_name')
            ->whereDate('created_at', '2021-10-15');
    })->get();

也许您想将查询重构为


    SELECT a.* 
    FROM `apiaccessauth` a, 
    `API_site_access_log` b 
    WHERE
    a.`site_name` = b.`site_name` AND
    b.`site_name` NOT LIKE '%2021-10-15%'

所以使用查询生成器


    $result = DB::table('apiaccessauth')
    ->join('API_site_access_log', 'API_site_access_log.site_name', '=', 'apiaccessauth.site_name')
    ->where('API_site_access_log.site_name', 'not like', "%2021-10-15%")
    ->get();

也许你需要一个 left 或 outer Join,这取决于你想要什么

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM