【问题标题】:SQL select show table if not same value from another table (Laravel)如果来自另一个表的值不同,则 SQL 选择显示表(Laravel)
【发布时间】:2021-12-11 09:12:54
【问题描述】:

这是我的查询,我试过这个查询它有效。

SELECT * 
FROM conference_venue 
WHERE id_venue NOT IN (SELECT id_venue FROM submission_data WHERE id_submission = 1);

我想在 Conference_venue 中显示数据。但我不想显示 id_venue 与 submit_data 表相同的数据(与提到 id_submission 的 id_venue 相同)。

我正在尝试查询 laravel 版本,但它是一个没有错误的空白屏幕。

DB::table('conference_venue')
    ->whereNotIn('id_venue', function($q){
      $q->select('id_venue')
      ->from('submission_data')
      ->where('id_submission', '=', 1);
    })->select('*')->get();

当我在 sql 查询控制台中尝试时,此查询有效,但当我使用 Laravel 查询生成器尝试时失败。

【问题讨论】:

标签: php laravel laravel-8


【解决方案1】:

你可以试试这个:

DB::table('conference_venue')
     ->select('*')
     ->whereRaw(
     'conference_venue.id_venue NOT IN (SELECT submission_data.id_venue FROM submission_data WHERE id_submission = 1)'
     );

或者更好的是,为conference_venuesubmission_data 创建一个模型(即:ConferenceVenueSubmissionData),您可以为ConferenceVenueSubmissionData 添加 Eloquent 关系。

雄辩的关系,支持多种常见的关系 关系(一对一、一对多、多对多等)是 定义为 Eloquent 模型类的方法。由于关系 还可以作为强大的查询构建器,将关系定义为 methods 提供了强大的方法链接和查询能力。

Eloquent: Relationships

在你ConferenceVenue类上,你可以添加一个类似下面的方法:

public function available() {
     return this->hasMany(SubmissionData, 'id_venue')
          ->select('*') // You can also specify relevant columns ONLY
          ->whereRaw(
               'conference_venue.id_venue NOT IN (SELECT submission_data.id_venue FROM submission_data WHERE id_submission = 1)'
          );
}

在哪里可以使用关系方法如下:

$available = ConferenceVenue::with('available')->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    相关资源
    最近更新 更多