2016-11-16 116 views
0

任何人都可以帮助我解决这个问题吗?我一直坚持几天的错误htmlspecialchars()期望参数1是字符串,在Laravel 5.3中给出的数组为从Laravel 5.3的外键填充下拉的正确方法

这里是我的控制器

public function create() 
    { 
     $categories = DB::table('categories')->pluck('name', 'id'); 
     foreach($categories as $category) 
     { 
      echo $category; 
     } 
     return view('admin.processor.create', compact('categories', $categories)); 
    } 

这是我的看法(形式)

{!! Form::open(['url' => '/processor']) !!} 
    {!! csrf_field() !!} 
    <div class="form-group"> 
     {!! Form::label('make', 'Manufacturer') !!} 
     {!! Form::select('make', ['Intel', 'AMD', 'Apple', 'Qualcomm', 'class' => 'form-control']) !!} 
    </div> 
    <div class="form-group"> 
     {!! Form::label('chipset', 'Chipset') !!} 
     {!! Form::text('chipset', ['class' => 'form-control']) !!} 
    </div> 
    <div class="form-group"> 
     {!! Form::label('type', 'Type') !!} 
     {!! Form::text('type', ['class' => 'form-control']) !!} 
    </div> 
    <div class="form-group"> 
     {!! Form::label('category', 'Category') !!} 
     {!! Form::select('categories', $categories, null, ['class' => 'form-control']) !!} 
    </div> 
    <div class="form-group"> 
     {!! Form::submit('Add Processor', ['class' => 'btn btn-primary form-control']) !!} 
    </div> 
{!! Form::close() !!} 

我只是想实现的东西相当于这个

<select class="form-control" name="category"> 
    <?php 
    $stmt = $connect->prepare("SELECT * FROM categories"); 
    $stmt->execute(); 
    while($row = $stmt->fetch()) 
    { 
     print "<option value='".$row['id']."'>".$row['name']."</option>"; 
    } 
    ?> 
</select> 

我的类别型号

use Illuminate\Database\Eloquent\Model; 

class Category extends Model 
{ 
    protected $fillable = ['name']; 

    public function processor() 
    { 
     return $this->hasMany('App\Processor', 'category_id'); 
    } 
} 

我的处理器型号

use Illuminate\Database\Eloquent\Model; 

class Processor extends Model 
{ 
    protected $fillable = ['make', 'chipset', 'type', 'category_id']; 

    public function category() 
    { 
     return $this->belongsTo('App\Category', 'category_id'); 
    } 
} 

回答

1

试试这个:

控制器

$categories = DB::table('categories')->pluck('name', 'id'); 
return view('admin.processor.create', compact('categories')); 

查看

{!! Form::select('categories', $categories, null, ['class' => 'form-control']) !!} 
+0

我试过了,但它说:“在Builder.php中的BadMethodCallException行2450: 调用未定义的方法Illuminate \ Database \ Query \ Builder :: lists()” –

+0

我已更新我的答案检查它。 –

+0

你不需要在'compact()'函数内传递'$ categories'作为第二个参数。 –

1

因此,对于那些谁正面临着同样的问题,仍然得到htmlspecialchars()期望参数1是字符串,在Laravel 5.3中给出的数组,我建议您使用普通的html表单而不是Laravel Collective的表单助手。

这里就是我所做的 我的控制器

public function create() 
    { 
     $categories = Category::pluck('name', 'id'); 
     return view('admin.processor.create', ['categories' => $categories]); 
    } 

和视图

<div class="form-group{{ $errors->has('category') ? ' has-error' : '' }}"> 
     <label for="category">Category</label> 
     <select name="category" id="category" class="form-control" required autofocus> 
      @foreach($categories as $category) 
      <option value="{{ $category }}">{{ $category }}</option> 
      @endforeach 
     </select> 
    </div> 

您现在应该可以显示创建页面。希望它有帮助。