Laravel 5 Blade模板不返回对象

时间:2015-10-22 03:11:17

标签: laravel-5.1 blade

使用 - > hasMany(App \ RoomType)和 - > belongsTo(App \ Location)的概念 我已经构建了必要的关系而没有问题(我喜欢laravel)。

Part of Location model:
...
  ->integer('id')->unsigned();
  ->string('name');
...
  RoomType(){return $this->hasMany('App\RoomType');)


Part of RoomType model:
...
  ->integer('location_id')->unsigned()->index();
  ->json('images')->unllable();  //  <--- older mysql will threat text, but not an issue
...
   protected $casts = ['images' => 'array'];
   Location(){return $this->belongsToMany('App\Location')};

在种子数据库之后,数据库包含:

在位置表

ID  NAME
1   Loc001
2   Loc002
3   Loc003

在RoomType表中

LOCATION_ID  IMAGES
1            'image1.jpg'
2            '{"0":"room-2.jpg","1":"room-3.jpg"}'
3            null

在控制器中

. . . (simplified with relevant relationship for easy reading )
$Loc = App\Location::find(2);
$Info['location'] = $Loc;
$Info['roomType'] = $Loc->RoomType();  

return view('index', compact('Info'));

到目前为止一切顺利!

但是在Blade模板上。

我在内循环失败

@foreeach ($Info['location'] as $index => $loc)  //this is an object, no issue
    {!! $loc !!}
    @foreeach ($Info['roomType'] as $rt)
        ???
        $rt->images  /// this return exact string instead of object ??  
    @endforeach
@endforeach

当我dd($ Info ['roomType'] - &gt; images)时,这个返回字符串而不是对象。

我在外环(位置)上没有问题。

我尝试使用json_decode()或toArray()从视图传递, 我仍然在Blade方面获得了一些信息。

演员表是有效的。奇妙的Laravel,但在控制器方面。

原因几乎没有逻辑可以检查是单个还是一组图像。

我怎么能为RoomType图像做foreach循环(如果它是一个数组)

感谢您的建议。

1 个答案:

答案 0 :(得分:0)

找到了罪魁祸首!

保存roomType时,图像数据不能是字符串,

roomType->images = '{"0":"room-2.jpg","1":"room-3.jpg"}'   <--- This does not work!

roomType->images = json_decode('{"0":"room-2.jpg","1":"room-3.jpg"}')   <--- This works!
roomType->images = ['room-2.jpg','room-3.jpg'] <--- this works
roomType->images = "['room-2.jpg','room-3.jpg']" <--- this not

感谢。