#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)