Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Nơi không tồn tại en Laravel

Bạn cũng có thể viết lại truy vấn của mình dưới dạng kết hợp bên trái như

SELECT i.*
FROM item i
LEFT JOIN qualifications q ON q.item_id = i.id  AND q.user_id = 2
WHERE q.item_id IS NULL

Trong trình tạo truy vấn, bạn có thể viết nó là

DB::table('item as i')
    ->select('i.*')
    ->leftJoin('qualifications as q', function ($join) use($user_id) {
        $join->on('q.item_id', '=', 'i.id')
             ->on('q.user_id', '=', $user_id);
    })
    ->whereNull('q.item_id')
    ->get();

Một cách tiếp cận khác mà tôi khuyên bạn nên thực hiện, là thiết lập các mối quan hệ và mô hình của bạn và thực hiện nó một cách hùng hồn

class Item extends Model
{
    public function qualifications()
    {
        return $this->hasMany(\App\Models\Qualification::class, 'item_id');
    }
}

class Qualification extends Model
{
    public function qualifications()
    {
        return $this->belongsTo(Item::class, 'item_id');
    }
}

Và sau đó, bạn có thể sử dụng Truy vấn vắng mặt mối quan hệ

Item::whereDoesntHave('qualifications', function ($query) use($user_id) {
    $query->where('user_id', '=', $user_id);
})->get();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có nhiều chèn mysql trong một nguyên tử truy vấn đơn không?

  2. Tránh đưa SQL vào biểu mẫu đăng ký php

  3. Java MySQL - Kết nối ống được đặt tên đưa ra cảnh báo khi đóng

  4. Cách xác minh quyền sở hữu miền

  5. Kết nối cơ sở dữ liệu MySQL từ Android