如何检查另一个表中是不是存在主键值?

Posted

技术标签:

【中文标题】如何检查另一个表中是不是存在主键值?【英文标题】:How can I check if a primary key value exists in another table or not?如何检查另一个表中是否存在主键值? 【发布时间】:2021-02-11 10:44:49 【问题描述】:

我在多个表中有country 的id(主键),我想检查它的值是否存在于另一个引用的表中。

尝试使用以下代码,但我认为这不是正确的方法。谁能给点建议...

public function check($id)

    $state = State::pluck('country_id');
    $country = DB::select("select count(*) from country where ? not in (?)",[$id,$state]);

    if($country == 0)
    
        //
    
    else
        //
    

【问题讨论】:

【参考方案1】:

您可以使用exists 检查记录的关系是否存在(或存在)。

假设您的 Country 模型上有一个名为 states 的关系:

public function states

  return $this->hasMany(State::class);

您可以检查Country 在您的数据库中是否有任何与之相关的States

// returns true if there are related states, otherwise false
Country::first()->states()->exists();

您可以使用任何您想要的过滤条件,因此您可以使用find($id)where('field', $value) 等而不是first()

【讨论】:

【参考方案2】:

这里使用Exists方法

public function check($id)

    $state = State::pluck('country_id');
    $country = DB::table('country') //table set
       ->whereIn('column_name',$state) //if array then used whereIn method
       ->where('column_name',$id) //if single value use where method
       ->exists();         

    if($country)
    
        //
    
    else
        //
    

【讨论】:

以上是关于如何检查另一个表中是不是存在主键值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在竞争条件下将主键值插入表中?

SELECT EXISTS 检查行是不是存在于另一个表中

Oracle 用另一个表的主键值插入和替换值

一个表中的主键是不是也可以作为主键出现在另一个表中?

SQL:选择另一个表中没有复合主键的条目

如何从文本框(windows窗体)检查主键是不是存在于我的数据库中,c#