web-dev-qa-db-ja.com

Laravel。クエリビルダを使用してテーブルの単一列の値を取得する

「items」という名前のテーブルと「ref_code」という名前のwhere条件の入力があります。

$items = DB::table('items')
             ->where('ref_code','=', $request->ref_code)
             ->get(['id', 'ref_code', 'name','price']);

しかし、私は各列の値をとることができないようです。

以下を使用して、クエリビルダーが機能するかどうかを確認しました。

return $items;

幸い、問題はありません。

ただし、単一の値を返すか取得することは、次の場合には機能しません。

return $items->id

私の構文は間違っていますか?これらはすべて私のコントローラーの中にあります。

編集:私は試しました

dd($items);

戻る前に、それは私にこれを示しました:

  Collection {#325 ▼
  #items: array:1 [▼
    0 => {#322 ▶}
  ]
}
3

結果で質問を更新していただきありがとうございます。デバッグ結果を見てください。それはのように見えます

_array:1 [▼
    0 => {#322 ▶}
  ]
_

つまり、get()メソッドを使用しているため、クエリは配列のコレクションを返します。したがって、get()メソッドは常に配列のコレクションを返します。

この問題を回避するには、first()の代わりにget()メソッドを使用する必要があります。 Remember:単一の行を取得する場合は、常にfirst()メソッドを使用する必要があります。

したがって、クエリは次のようになります。

_$items = DB::table('items')
             ->select('id', 'ref_code', 'name', 'price')
             ->where('ref_code','=', $request->ref_code)
             ->first();
_

または

_$item = YourModelName::select('id', 'ref_code', 'name', 'price')
             ->where('ref_code','=', $request->ref_code)
             ->first();
_

そして最後にlike$ item-> id、$ item-> ref_codeなどの出力を取得します。

それが役立つことを願っています。

参照:https://laravel.com/docs/5.4/queries#retrieveing-results

5
Md. Abu Taleb

get() コレクションを返します

_$items = DB::table('items')
         ->where('ref_code','=', $request->ref_code)
         ->get(['id', 'ref_code', 'name','price']);
_

上記の場合、_$items_はコレクションになるため、プロパティにアクセスするにはコレクションをループする必要があります

_foreach ($items as $item) {
    $item->price;
}
_

モデルインスタンスを返す必要がある場合は、代わりにメソッド first() を使用できます。

_$items = DB::table('items')
             ->select('id', 'ref_code', 'name', 'price')
             ->where('ref_code','=', $request->ref_code)
             ->first();
_

としてプロパティにアクセスします

_$items->price;
_
1
linktoahref

モデルを使用してこれを試してください

$result =  Model_name::->where('ref_code','=', $request->ref_code)
                       ->first(['id', 'ref_code', 'name', 'price']);
0
sanjiv pandey