2017-10-05 20 views
0

私のコードには、Custom User Fieldsという名前のJsonカラムがあります。私は自分のdatatableが表示のための個々のフィールドとしてそのJSON列を取得したい。だから、基本的に私のモデルデータを返しますが、として場合:だからLaravel JSONのフィールドとモデルのデータテーブルの属性

{ 
"id":1 
"name": "joe" 
} 

{ 
"id":1 
"json" : { 
    "name": "joe"  
    } 
} 

私は(私がモデル::すべての()またはモデルを呼び出す::のpaginate())として変換するためにそれを必要とします私のDatatableはこのデータを表示できます。このjsonは動的なフィールドなので、最初から認識されていないため、モデルにappendsプロパティを追加できません。私はこれら2つの変種を試しました:しかし、どれもうまくいきません。

public function getJsonAttribute($value) 
{ 
    $json = json_decode($value); 
    foreach ($json as $k => $v) { 

     array_push($this->appends, $key); 
     // or 
     $this->attributes[$k] = $v; 
    } 
    return $json; 
} 

答えて

2

あなたの場合、これは問題ありません。しかし、そのマルチ配列は、foreachループをもう1つ追加できることを意味します。次に働くだけです。あなたのコードで

$キーは** ** $キーでそのタイプミスについて

public function getJsonAttribute($value) 
{ 
    $json = json_decode(json_encode($value),TRUE); 
    $jsonArr = []; 
    foreach ($json as $k => $v) { 
     if($k == "id") 
      $jsonArr['id'] = $v; 
     if($k == "json" && empty($v['name']) === false) 
      $jsonArr['name'] = $v['name']; 
    } 

    return (object)$jsonArr; 
} 
+1

ああおかげで定義されていません。あなたのコードはデフォルトのものですが。 Jsonは既にkey => valueのペアの連想配列を返すので、配列に変換して返す必要はありません。私はコレクションをループし、** getJsonAttribute **に適用したforeachループを実行するモデルのすべてのインスタンスで関数を実行することでそれを解決しました。 –

関連する問題