laravel中的数组到字符串转换

时间:2017-03-30 16:37:58

标签: php laravel-5

我试图从laravel 5.0中的表中获取一些数据,如此

public function index()
    {
        $data = DB::table('modules')->get();

        return view("BaseView.home")->with('data',$data);
    }

这是我的观点

 @foreach($data as $modules)
    <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
            {{ $modules->module_name }}<i class="plusMinus fa fa-plus-square plusMinusSpacing" aria-hidden="true"></i>
        </a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
            {!! $moduleCategories = DB::table('module_categories')->where('modules_id','=',$modules->id)->get() !!}
            @foreach($moduleCategories as $category)
            <a class="dropdown-item" href="#">{{ $category->categories_name }}</a>
            @endforeach
        </div>
    </li>
    @endforeach
从另一个查询结果中获取

$ module-&gt; id。现在当我尝试运行时,我得到了Array to string conversion。有人可以指出错误。期望的输出是>在某种意义上,可以有多个类别名称匹配该条件。

2 个答案:

答案 0 :(得分:3)

问题是你试图将php逻辑放在echo {{ ... }}中。您正在尝试回显一个集合或一组数据,因此您会收到错误Array to string conversion。正确的方法是在控制器中执行逻辑。但要快速解决,请替换:

{!! $moduleCategories = DB::table('module_categories')->where('modules_id','=',$modules->id)->get() !!}

<php $moduleCategories = DB::table('module_categories')->where('modules_id','=',$modules->id)->get(); ?>

永远不要使用{{ ... }}{!! ... !!}来输入逻辑,这些是用来回显字符串的。

== EDIT ==

我建议使用laravels eloquent关系方法,这将简化代码,并从视图中分离逻辑。

注意:期望您使用的是laravel命名约定。

Modules模型上,将关系添加到ModuleCategory,如下所示:

public function module_categories()
{
    return $this->hasMany('App\ModuleCategory');
}

在您的控制器上,在索引方法上替换:

$data = DB::table('modules')->get();

$data = Modules::get();

最后在视图上,改变它:

@foreach($data as $modules)
<li class="nav-item dropdown">
    <a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
        {{ $modules->module_name }}<i class="plusMinus fa fa-plus-square plusMinusSpacing" aria-hidden="true"></i>
    </a>
    <div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
        @foreach($modules->module_categories as $category)
        <a class="dropdown-item" href="#">{{ $category->categories_name }}</a>
        @endforeach
    </div>
</li>
@endforeach

答案 1 :(得分:0)

正如我对Carlos的解决方案所评论的,以下是我如何解决同样的错误......

//Controller
$users  = User::where('blah', 'blah')->get();
return view('index', [
   'users'  => $users,
]);


//View
<script type="text/javascript">
  angular.module("app").factory("DataService", function() {
    return {
      users: {!! $users !!},
    };
 });
</script>

如上所述,这将导致Array to string conversion错误,因为$users是一个数组。

但是,如果$users是一个“集合”,那么这个错误就不会发生

//Controller
$users  = User::all();
return view('index', [
   'users'  => $users,
]);
//This is ok

或者,

//Controller
$users  = collect([]);
return view('index', [
   'users'  => $users,
]);
//This is fine too