Найдите запись, где id не является первичным ключом в fuelphp

#fuelphp #fuelphp-orm

#fuelphp #fuelphp-orm

Вопрос:

Есть ли какой-либо способ найти запись с использованием ORM в fuelphp, если первичный ключ таблицы не id является столбцом?

Например, listing_id это мой первичный ключ. И я не смог получить желаемый результат с:

 $listing_id = Input::get('listing_id');
$entry = Model_ExampleData::find($listing_id);
  

Комментарии:

1. Включите профилировщик и профилирование вашего подключения к базе данных, и вы увидите, что сгенерированный SQL неверен из-за ответа ниже. Не забудьте проголосовать за нее!

Ответ №1:

защищенный статический $_primary_key

По умолчанию для этого параметра установлено значение array(‘id’), если вы используете другое имя столбца или несколько первичных ключей, вам необходимо установить это свойство.

 class Model_Article extends OrmModel
{
    protected static $_primary_key = array('aid');
}
  

Первичный ключ должен быть реальным первичным ключом: уникальным и неизменным. Не используйте его для других целей (например, для внешнего ключа в отношении один-один), это также не сработает, поскольку PK нельзя изменить. Orm не будет проверять это, и хотя на первый взгляд может показаться, что это работает: у вас будут проблемы.
Для PK не обязательно быть auto_increment (хотя и предпочтительнее), и вы можете указать PK самостоятельно, но только в первый раз. Как только он установлен, он установлен.

Документы.

Ответ №2:

Для этой цели у вас есть префиксы магического метода: find_by_

Добавив этот префикс, вы можете указать FuelPHP находить записи с использованием произвольных полей в вашей модели без изменения конфигураций модели, и возможно множественное условие с разделением имен полей на _и_ между ними.

 Model_ExampleData::find_by_FIELD($value)
Model_ExampleData::find_by_FIELD1_and_FIELD2($value1, $value2)
Model_ExampleData::find_all_by_FIELD($value)
Model_ExampleData::find_all_by_FIELD1_and_FIELD2($value1, $value2)
Model_ExampleData::count_by_FIELD($value1)