使用 - > 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循环(如果它是一个数组)
感谢您的建议。
答案 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
感谢。