2016-03-21 2 views
2

Возможно, кто-то мне поможет.Laravel, проверьте, имеются ли данные/запись в любой связанной таблице

Структура БД:

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 
} 

но есть два запроса, я нужен один прекрасный запрос :)

A В результате, когда я нажимаю кнопку «Удалить пользователя», перед удалением я проверяю, существуют ли данные/запись в любой связанной таблице, если это правда, появится предупреждающее сообщение об удалении связанных данных/записи (из файлов storage_items или archive_objects) , иначе он удалит только пользователя (от пользователей).

+0

вы можете использовать триггер с внутренней стороны, чтобы сделать это ... –

ответ

1

Попробуйте это:

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

Woohoo, спасибо, чувак, он отлично работает! И я лучше, чем мое собственное решение: D $ users = Пользователь :: has ('storageItem') -> orHas ('archiveObject') -> get() -> pluck ('id') -> toArray() ; if (in_array (2, $ users)) { // существует } – Globax

0

попробовать это has и orWhereHas

например:

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

Nop, это не работает. У меня есть эта ошибка http://prntscr.com/aiotaa – Globax

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) 
Смежные вопросы