Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Laravelのクエリでget()したカラムを変数名使って処理する方法

Q&A

Closed

以下例です
Resumeテーブルから、ログインユーザに該当するデータを一つだけ取得
その中で特定のカラムだけを判定処理に使いたい

//ユーザID
$user_id = Auth::user()->id;
$record = Resume::query()->where('user_id', $user_id)->first();

以下のようにカラムごとに設定すれば処理は出来ます

if($record->id =='1'){
   echo "OK"
}
if($record->test =='1'){
   echo "OK"
~~~~(略)

ただ可読性悪いので
判定処理に使うカラムを配列として持っておいて
下のような感じでループ処理したいのですが、取得した$record->$変数名にすると処理できません

$collumns = ["id","test"];
if($record->$collumns[0] =='1'){
   echo "OK"
}

何かいい方法はないでしょうか
->カラム名以外に値を取得する方法ってありますでしょうか・・

0

2Answer

$prop = get_object_vars($record);
で一度連想配列にしてしまうのは如何でしょうか

2Like

Comments

  1. @shumaiuma

    Questioner

    配列にするのは発想出ませんでした、ありがとうございます!

PHPで可変プロパティ名でアクセスするには次のようにします。

いったん変数に入れる
$columns = ["id","test"];
$column = $columns[0];
$record->$column;
{ }で括る
$columns = ["id","test"];
$record->{$columns[0]};

詳しくはマニュアルを参照してください。

またLaravelのコードを見ると__getからgetAttributeを呼び出す形になっているので、このような方法も可能かもしれません。

getAttributeメソッドでアクセス
$columns = ["id","test"];
$record->getAttribute($columns[0]);

あるいは、配列に変換してアクセスする方法はいかがでしょうか?

配列に変換してアクセス
$columns = ["id","test"];
$recordArr = $recode->toArray();
$recordArr[$columns[0]];

1Like

Comments

  1. @shumaiuma

    Questioner

    詳細に教えて頂きありがとうございます。
    無事実装すること出来ました。

Your answer might help someone💌