Laravel 中数组到字符串的转换

Reh*_*han 5 php laravel-5

我正在尝试从 laravel 5.0 中的表中获取一些数据,如下所示

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

        return view("BaseView.home")->with('data',$data);
    }
Run Code Online (Sandbox Code Playgroud)

这是我的观点

 @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
Run Code Online (Sandbox Code Playgroud)

$module->id是从另一个查询结果中获取的。现在,当我尝试运行这个时,我得到了Array to string conversion. 有人可以指出错误吗。预期输出 > 1,因为可以有多个类别名称与该条件匹配。

Car*_*los 3

问题是您试图将 php 逻辑放入 echo 中{{ ... }}。您正在尝试回显数据集合或数组,因此您收到错误,Array to string conversion。执行此操作的正确方法是在控制器中执行逻辑。但为了快速修复,请替换:

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

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

切勿使用{{ ... }}{!! ... !!}放置逻辑,这些逻辑是为了回显字符串。

==编辑==

我建议使用 laravels 雄辩的关系方法,这将简化代码,并将逻辑与视图分开。

注意:如果您使用 Laravel 命名约定,则需要这样做。

在您的Modules模型上,添加一个关系,ModuleCategory如下所示:

public function module_categories()
{
    return $this->hasMany('App\ModuleCategory');
}
Run Code Online (Sandbox Code Playgroud)

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

$data = DB::table('modules')->get();
Run Code Online (Sandbox Code Playgroud)

$data = Modules::get();
Run Code Online (Sandbox Code Playgroud)

最后在视图上,将其更改如下:

@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
Run Code Online (Sandbox Code Playgroud)