Возможно ли пользовательское поле выбора с использованием ORM на Fuelphp?

У меня проблема, когда я хочу запросить таблицу с помощью ORM, например, у меня есть таблица статей с идентификатором поля, автором, текстом.

Мой код такой:

// Single where
$article = Model_Article::find()->where('id', 4);
print_r($article);

этот код будет извлекать все поля в статье таблицы, это похоже на select * from article where id = 4

Попробуйте возможность

$article = Model_Article::find(null, array('id','title'))->where('id', 3);

ответ

object(Orm\Query)#89 (14) {
  ["model":protected]=>
  string(10) "Model_Article"
  ["connection":protected]=>
  NULL
  ["view":protected]=>
  NULL
  ["alias":protected]=>
  string(2) "t0"
  ["relations":protected]=>
  array(0) {
  }
  ["joins":protected]=>
  array(0) {
  }
  ["select":protected]=>
  array(1) {
    ["t0_c0"]=>
    string(5) "t0.id"
  }
  ["limit":protected]=>
  NULL
  ["offset":protected]=>
  NULL
  ["rows_limit":protected]=>
  NULL
  ["rows_offset":protected]=>
  NULL
  ["where":protected]=>
  array(1) {
    [0]=>
    array(2) {
      [0]=>
      string(9) "and_where"
      [1]=>
      array(3) {
        [0]=>
        string(5) "t0.id"
        [1]=>
        string(1) "="
        [2]=>
        int(3)
      }
    }
  }
  ["order_by":protected]=>
  array(0) {
  }
  ["values":protected]=>
  array(0) {
  }
}

это не возвращаемый идентификатор или поле заголовка.

но когда я пытаюсь добавить метод get_one()

$article = Model_Article::find(null, array('id','title'))->where('id', 3)->get_one();

id возвращается, а title нет и другое поле, я не знаю почему?

Справочник

  1. Обсуждение ORM FuelPHP говорят, что в настоящее время ORM будет выбирать все столбцы, не планируется менять это в момент.

Моя проблема

  1. Выберите настраиваемое поле с помощью ORM, как это select id,owner from article where id = 4, оно будет возвращать только идентификатор и владельца. Возможно ли получить это с помощью ORM на FUELPHP?

person viyancs    schedule 05.10.2012    source источник
comment
Меня сейчас нет дома, так что попробуйте это и скрестите палец ;-) : $article = Model_Article::find(null, array('id', 'owner'))-›where('id', 4) ; Читая код фреймворка, это должно сработать, дайте мне знать, чтобы я мог написать для этого ответ.   -  person Marco Pace    schedule 08.10.2012
comment
я обновляю свой вопрос после того, как попробую ваше предложение... :)   -  person viyancs    schedule 08.10.2012


Ответы (4)


Не используй

Model_Article::find()->

но использовать

Model_Article::query()->

Первый работает, но считается ошибкой, которая может измениться в будущих версиях.

Начиная с версии 1.4 ORM поддерживает частичный выбор, используя

Model::query()->select('id', 'value')->

Второй параметр find() — это массив условий для поиска, таких как предложения 'where' или 'order_by'. В этом массиве нет поддержки выбора имен столбцов.

person WanWizard    schedule 31.10.2012

Orm\Model извлекает весь столбец, потому что он не может работать с неполными/частичными объектами.

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

DB::select('id','title')->from(Model_Article::table())->where('id', 4);
person Savageman    schedule 12.10.2012
comment
спасибо за ваше предложение, я так думаю с вашим предложением... :) - person viyancs; 12.10.2012
comment
но это все еще не решает мою проблему, я предпочитаю использовать прямой запрос, потому что я могу настроить свой запрос... - person viyancs; 12.10.2012
comment
Построитель запросов имеет почти такой же синтаксис, что и класс Orm\Query. Точно так же вы должны иметь возможность настроить свой запрос. - person Savageman; 12.10.2012
comment
В моей версии Fuelphp выпущена новая версия и поддерживается выбор настраиваемого поля с использованием orm, начиная с версии 1.4 ... - person viyancs; 30.01.2013

если вы пытаетесь узнать результат, например, запрос «выберите * из статьи, где id = 4»

$article = Model_Article::find()->where('id', 4)->get_one();

print_r($article);

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

и если ваше поле не отображается, проверьте модель Model_Article. Эта проблема может возникнуть, если вы не объявили поля в списке свойств.

person Vinay    schedule 12.10.2012

Выпущена новая версия Fuelphp, вы можете увидеть эту документацию, в моем случае версия Fuelphp 1.2 и не может выбрать пользовательское поле с помощью orm.

выбор настраиваемого поля с помощью формы доступен с версии 1.4

http://fuelphp.com/docs/packages/orm/crud.html

// Find only some columns
Model_Article::query()->select('id', 'name');
Model_Article::find('all', array('select' => array('id', 'name')));
person viyancs    schedule 30.01.2013