Laravel,检查任何相关表中是否存在数据/记录

时间:2016-03-21 23:36:49

标签: database model laravel-5.1 relation

也许有人会帮助我。

数据库结构:

users
id, name

storage_items
id, name, user_id

archive_objects
id, name, user_id

在用户模型中,我有:

public function storageItem()
{
    return $this->hasOne(StorageItem::class);
}

public function archiveObject()
{
    return $this->hasOne(ArchiveObject::class);
}

我需要检查任何相关表格中是否存在数据/记录。

这样的事情:

if (User::has('storageItem')->orHas('archiveObject')->find(1)->count()) {
    //exists
}

这有效:

if (User::has('storageItem')->find(1)->count()) {
    //exists
}

这也是:

if (User::has('archiveObject')->find(1)->count()) {
    //exists
}

但这是两个查询,我需要一个漂亮的查询:)

因此,我需要当我点击“删除用户”按钮,在删除之前,我检查数据/记录是否存在于任何相关表中,如果为真,它将显示有关删除相关数据/记录的警告消息(来自storage_items或archive_objects),否则它将只删除用户(来自用户)。

3 个答案:

答案 0 :(得分:1)

试试这个:

User::where(function($query) { 
    $query->has('storageItem')
        ->orHas('archiveObject');
})->find(1);

答案 1 :(得分:0)

试试这个hasorWhereHas

例如:

if (User::has('archiveObject')-orWhereHas('storageItem')->find(1)->count()) {
    //exists
}

答案 2 :(得分:0)

我尝试过其他代码

User::whereHas('archiveObject', function() {})->orWhereHas('storageItem', function() {})->find(2)

但它与此类似

User::has('archiveObject')->orHas('storageItem')->find(2)

我有这个结果

{
    "id": 1,
    "username": "admin",
    "created_at": "2016-02-05 11:45:12",
    "updated_at": "2016-03-20 15:12:15"
}

而不是

{}

结果" id":1,我应该有这个

User::has('archiveObject')->orHas('storageItem')->find(1)