c0002
не одно поле, а два. То же самое с XXXnnn
или что угодно. Это неверно, и это серьезно ограничит вашу способность использовать данные, а также использовать функции и возможности базы данных. Разделите его на два дискретных элемента данных: column_1 CHAR(1)
column_2 INTEGER
Затем установите AUTOINCREMENT на column_2
. И да, ваш первичный ключ может быть (column_1, column_2)
, поэтому вы не потеряли значение c0002
для вас. Person
или Organisation
, содержащую общие данные (Name, Address
...), одну таблицу для Customer
, содержащую данные, специфичные для клиента (CreditLimit
...), одна таблица для Supplier
, содержащие данные, специфичные для поставщика (PaymentTerms
...), не содержат двусмысленных или необязательных столбцов, поэтому нет ограничений Nulls на использование или функции SQL. И когда вам нужно добавлять столбцы, вы делаете это только там, где это необходимо, не затрагивая все другие требования к плоскому файлу. Объем действия ограничивается областью изменения. Итак, $discountTableItemIdIn
- это собрание всей таблицы? Это означает, что вам понадобится другая функция, поскольку логика ->where()
в коллекции отличается от того, как она функционирует в экземпляре построителя (eloquent).
Попробуйте использовать filter()
:
$discountArticles = $discountTableItemIdIn->filter(function ($item) use($articleId) {
return $item->recipient_type == "article" && $item->recipient_id == $articleId;
})->toArray();
. Это отфильтровывает вашу коллекцию $discountTableItemIdIn
для записей, которые имеют тип article
и recipient_id
любого [ 117] содержит, возвращает новую коллекцию и преобразовывает ее в массив.