Получить записи таблицы, кроме тех, которые имеют значения внешнего ключа в другой таблице - PullRequest
1 голос
/ 30 марта 2020

У меня есть две таблицы товары & import_goods . товар PK id имя imported_goods PK id FK good_id количество import_goods имеет значения внешнего ключа из таблицы goods , и я пытаюсь отобразить все товары записей кроме записей, которые имеет значения внешнего ключа в import_goods . Пример (CSV): товар с данными 1, оранжевый 2, яблоко 3, Bannana 4 человек go import_goods с данными 1,1,20 кг 2,2,40 кг 3,3,60 кг Модели Good class Good extends Model { /** * Get the Imported Goods for this Good. */ public function imported_goods() { return $this->hasMany('App\Models\Imported_good','good_id'); } } Imported_Good class Imported_good extends Model { /** * Get the Good info for this Imported Good. */ public function good() { return $this->belongsTo('App\Models\Good','good_id'); } } Ожидаемым результатом * будет запись в товара с данными (4, значение 4) и всеми другими записями, отброшенными

Ответы [ 2 ]

1 голос
/ 30 марта 2020

Если вы следовали хорошей практике и рекомендовали соглашение об именах между именами таблиц, моделей, ключей, полей и т. Д. c ( как здесь, например, ), вы можете сделать это просто с помощью:

// Parent.php model 
public function children()
{
    return $this->hasMany(Child::class);
}

// than somewhere in controller
$parents = Parent::doesntHave('children')->get();

Это обобщенный c пример. Если вы поделитесь фактическими именами и кодом классов моделей в той же степени, что и структура таблицы, вместо некоторых х / у-заполнителей, я смогу рассказать больше для вашего конкретного случая.

1 голос
/ 30 марта 2020

Вы можете использовать подзапрос:

SELECT * FROM X WHERE id NOT IN (SELECT x_id FROM Y);

Или вы можете выполнить объединение:

SELECT X.* FROM X LEFT JOIN Y ON X.id = Y.x_id WHERE y.x_id IS NULL;

Если вам не нужно беспокоиться о производительности, я бы предложил Первый вариант (он более читабелен и понятен). Если вам нужно, учтите, что объединения обычно выполняются быстрее, чем подзапросы .

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