JSON数据和Laravel视图

JSON数据和Laravel视图,json,laravel,view,Json,Laravel,View,我在数据库的一个字段中存储了一些JSON数据,为了在视图中显示数据,我在控制器中编写了这个查询 $gallerie=Articolo::select('nome_gal')) ->其中('nome_gal','LIKE','%nome_gal%')) ->orderBy('created_at','desc') ->orderBy('updated_at','desc') ->采取(6) ->get(); 在控制器中,我以这种方式将该查询和其他查询传递给视图 return view('arti

我在数据库的一个字段中存储了一些JSON数据,为了在视图中显示数据,我在控制器中编写了这个查询

$gallerie=Articolo::select('nome_gal'))
->其中('nome_gal','LIKE','%nome_gal%'))
->orderBy('created_at','desc')
->orderBy('updated_at','desc')
->采取(6)
->get();
在控制器中,我以这种方式将该查询和其他查询传递给视图

return view('articoli')->with(array('articoli' => $articoli, 'gallerie'=>$gallerie, 'categorie'=> $categorie, 'trevideo'=>$trevideo, 'treaudio'=>$treaudio));
在视图的侧栏部分,我使用了以下代码:


最后时刻
    @foreach(json_解码($gallerie,true)为$galleria)
  • {{$galleria['cover_gal']}
  • @endforeach
因此,当我尝试加载页面时,在
下看不到任何代码

JSON数据的结构如下所示


考虑到
json\u decode
需要一个字符串,我认为控制器部分有问题。您有什么建议吗?

看起来您的JSON数据存在某些问题: 如果你认为“id_foto”和“nome_foto”是一对,那么它应该是

"galleria":[
            {"id_foto": "1","nome_foto": "DSC_0006.JPG"}, 
            {"id_foto": "2","nome_foto": "DSC_0017.JPG"}
           ]
而不是

"galleria":[{
             "id_foto": "1",
             "nome_foto": "DSC_0006.JPG",
             "id_foto": "2",
             "nome_foto": "DSC_0017.JPG",
             "id_foto": "3"
            }]
因为当我们
json\u decode()
您的json数据时,我们只会得到最后一个'id\u foto'和'nome\u foto'像

 [galleria] => Array ( [0] => Array ( [id_foto] => 24 [nome_foto] =>    foto_9.jpg ))
我猜这是错误的,请查看编辑的视图代码

控制器

return view('articoli')->with(array('articoli' => $articoli,
'gallerie'=>json_decode($gallerie,true), 'categorie'=> $categorie, 
'trevideo'=>$trevideo, 'treaudio'=>$treaudio));
查看[已编辑]

<div class="sidebar-item popular">
    <h3>Ultime foto</h3>
    <ul class="gallery">
         @foreach($gallerie['galleria'] as $galleria=>$gal)
            <li>{{{$gal['id_foto']}}} <br> {{{$gal['nome_foto']}}}</li>
         @endforeach
    </ul>
</div>

您的json在galleria数组中具有相同的键名,因此它只接受最后一个值。相反,您可以使用

{
    "nome_gal": "just a name",
    "cover_gal": "DSC_0017.JPG",
    "galleria": [{
        "id_foto1": 1,
        "nome_foto1": "DSC_0006.JPG",
        "id_foto2": 2,
        "nome_foto2": "DSC_0017.JPG",
        "id_foto3": 3,
        "nome_foto3": "DSC_0018.JPG"
    }]
}
这是您的json解码数组

Array
(
    [nome_gal] => just a name
    [cover_gal] => DSC_0017.JPG
    [galleria] => Array
        (
            [0] => Array
                (
                    [id_foto] => 24
                    [nome_foto] => foto_9.jpg
                )

        )

)

这就是我所做的,它对我起了作用,在下文中,所有内容都是重述,因此对于新读者来说,解决方案是完整的。在表的模型中,我定义了一个虚构的属性,如下所示:

protected$appends=['att1','att2','att3','att4','nome_galla']

显然

公共函数getNomeGallaAttribute(){
$json=$this->attributes['nome_gal'];
返回json_decode($json,true);
}

在控制器中,我有一个查询:

$gallerie=Articolo::select('nome_gal')->where('nome_gal','LIKE','%nome_gal%')->orderBy('created_at','desc')->orderBy('updated_at','desc')->take(6)->get()

很明显,这段话是这样说的:

返回视图('articoli')->带有(数组('articoli'=>$articoli,'gallerie'=>$gallerie,'categile'=>$categile,'trevideo'=>$trevideo,'treaudio'=>$treaudio))

最后,在我看来,我是这样解决的:


最后时刻
    @foreach($gallerie作为$galleria)
  • @endforeach

出于某种原因,规则语法

{{asset(“gallerie/$galleria['nome_galla']['nome_della_gal']]/img_rid/$galleria['nome_galla']['cover_galla']}

没有为我工作(结果是死亡的白页)


感谢大家的贡献,我了解php,但我对laravel是新手:-)

您是否尝试过这样的方法{{$galleria->cover\u gal}}cover\u gal是JSON数据的一部分。JSON数据的结构是首先检查查询输出,我认为您的查询是错误的,在'like'子句中您指定了列名(%nome_gal%),整个页面是白色的:(我怀疑JSON数据无效,但是,当我尝试在测试路径中加载它时,一切正常
$gallerie=\App\Articolo::select('nome_gal','id_articolo')->其中('nome_gal','LIKE','nome_gal%')->orderBy('created_at','desc')->orderBy('updated_at','desc')->take(34)->get();foreach($gallerie as$nomeria){$galleria=json\u decode($galleria['nome_galleria],true);echo''.$galleria->id_articolo.-'.$gallea['cover'.$galle galle
看起来您的json数据在galleria中存在某些问题。事实上,这是我纠正的问题之一。无论如何,我尝试访问cover\u gal而不是galleria。我还尝试简化json,删除了数组部分,但没有成功。在这一刻,我正在寻找一个传递到视图的json工作示例
Array
(
    [nome_gal] => just a name
    [cover_gal] => DSC_0017.JPG
    [galleria] => Array
        (
            [0] => Array
                (
                    [id_foto] => 24
                    [nome_foto] => foto_9.jpg
                )

        )

)