0

ORM を使用してテーブルをクエリするときに問題が発生します。たとえば、フィールド ID、作成者、テキストを含む記事テーブルがあります。

このような私のコード:

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

そのコードはテーブル 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) {
  }
}

それは戻りIDまたはタイトルフィールドではありません。

しかし、 get_one() メソッドを追加して試してみると

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

id は return ですが、title は別のフィールドです。理由はわかりません。

参照

  1. ORM ディスカッション FuelPHP現在、ORM はすべての列を選択すると言われていますが、現時点ではそれを変更する予定はありません。

私の問題

  1. このようにORMを使用してカスタムフィールドを選択select id,owner from article where id = 4すると、IDと所有者のみが返されます.FUELPHPでORMを使用してそれを取得することは可能ですか?
4

4 に答える 4

3

使用禁止

Model_Article::find()->

しかし使う

Model_Article::query()->

最初のものは機能しますが、将来のバージョンで変更される可能性があるエラー状況と見なされます。

バージョン 1.4 の時点で、ORM は部分選択をサポートしています。

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

find() の 2 番目のパラメーターは、「where」句や「order_by」句など、検索条件の配列です。この配列での列名の選択はサポートされていません。

于 2012-10-31T19:47:59.947 に答える
2

Orm \ Modelは、不完全な/部分的なオブジェクトを処理できないため、すべての列をフェッチします。

カスタムクエリが必要な場合は、ORMを使用せず、クエリビルダーを使用してください。

DB::select('id','title')->from(Model_Article::table())->where('id', 4);
于 2012-10-12T09:33:33.920 に答える
0

クエリ「select * from article where id = 4」のような結果を見つけようとしている場合

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

print_r($article);

get_one() は 1 つのレコードのみを ( object として) 返すことを理解する必要があります。get() は、複数のレコードを (オブジェクトの配列の形式で) 返します。

フィールドが表示されない場合は、モデル Model_Article を確認してください。この問題は、プロパティ リストでフィールドを宣言していない場合に発生する可能性があります。

于 2012-10-12T07:38:51.650 に答える
0

Fuelphp は新しいバージョンをリリースしました。このドキュメントを見ることができます。私の場合、fuelphp のバージョンは 1.2 で、orm を使用してカスタム フィールドを選択できません。

バージョン1.4以降、ormを使用してカスタムフィールドを選択できます

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')));
于 2013-01-30T10:32:34.523 に答える