Mysql 如何使用外键检索数据| | laravel 5.3

Mysql 如何使用外键检索数据| | laravel 5.3,mysql,laravel,foreign-keys,Mysql,Laravel,Foreign Keys,我正在使用Laravel5.3和MySQL。我试图使用外键从另一个表中检索数据。将显示我从另一个表“domaines”获得的数据的字段是一个下拉列表,但它始终为空 这是我的ProjectController: class ProjectController extends Controller { public function index(Request $request) { $projects = Project::orderBy('id','DESC')

我正在使用Laravel5.3和MySQL。我试图使用外键从另一个表中检索数据。将显示我从另一个表“domaines”获得的数据的字段是一个下拉列表,但它始终为空

这是我的ProjectController:

class ProjectController extends Controller
{
    public function index(Request $request)
    {
         $projects = Project::orderBy('id','DESC')->paginate(5);

         return view('projects.index',compact('projects'))
            ->with('i', ($request->input('page', 1) - 1) * 5);
    }

    public function create()
    {
        $domaines = Domaine::pluck('name', 'id');

        return view('projects.create', compact('domaines'));
    }

    public function store(Request $request)
    {
        $domaine_id = Domaine::all()->pluck('name', 'id');     

        $this->validate($request, [
            'title' => 'required',
            'code' => 'required',       
            'domaine_id' => 'required'
            ]);

        Project::create($request->all());

        return redirect()->route('projects.index') //???? add compact or not ??
                    ->with('success','Project created successfully');
    }

    public function show($id)
    {
        $project = Project::find($id);

        return view('projects.show',compact('project'));
    }

    public function edit($id)
    {
        $project = Project::find($id);
        return view('projects.edit',compact('project'));
    }

    public function update(Request $request, $id)
    {
        $this->validate($request, [
            'title' => 'required',
            'code' => 'required',
            'domaine_id' => 'required'
        ]);

        Project::find($id)->update($request->all());

        return redirect()->route('projects.index')
                    ->with('success','Project updated successfully');
    }

    public function destroy($id)
    {
        Project::find($id)->delete();

        return redirect()->route('projects.index')
                    ->with('success','Project deleted successfully');
    }
}
这是show.blade.php:

<div class="col-xs-12 col-sm-12 col-md-12">
    <div class="form-group">
        <strong>Domaine:</strong>
        {{ $project->domaine_id }}
    </div>
</div>
<select class="form-control" name="domaine_id">
            @if (empty($domaine_id))                                    
                Whoops! Something went wrong                            
            @else
            @foreach($domaines as $domaine)
              <option value="{{$domaine->id}}">{{$domaine->name}}</option>
            @endforeach
            @endif
</select>
知道为什么列表总是空的吗?我有播种机,所以数据库中的表不是空的

知道为什么列表总是空的吗

由于您使用的是
pluck()
方法,所以应该像这样迭代列表:

@foreach($domaines as $id => $domaine)
     <option value="{{ $id }}">{{ $domaine }}</option>
@endforeach
您可以按如下方式更改if条件:

<select class="form-control" name="domaine_id">
            @if (!count($domaines) > 0)                                    
                Whoops! Something went wrong                            
            @else
            @foreach($domaines as $domaine)
              <option value="{{$domaine->id}}">{{$domaine->name}}</option>
            @endforeach
            @endif
</select>

@如果(!count($domaines)>0)
哎呀!出了点问题
@否则
@foreach($domaines作为$domaine)
{{$domaine->name}
@endforeach
@恩迪夫

顺便说一下,在控制器中使用all()而不是pull。

我尝试了all(),但它没有改变任何东西。和get()生成此错误:传递给Illumb\Database\Grammar::columnize()的参数1必须是在第123行的C:\Program Files(x86)\EasyPHP-Devserver-16.1\eds www\PC\vendor\laravel\framework\src\illumb\Database\Query\Grammars\Grammar.php中调用的给定字符串数组类型,并且defined@Naj您是否尝试迭代
pulk()
结果如我所示?另外,在使用
get()
时尝试使用此选项:
get(['name','id'])
是的,我迭代了pull()结果,同时将pull()替换为get()@Naj?您应该在我提供的迭代代码中使用
pluck()
,或者应该像以前一样使用
get()
和迭代数据。如果您做得对,但在使用
pluck()
时仍然出现任何错误,请在此处发布。不,不是同时发布。这些方法都不起作用:(非常感谢,这是有效的。好吧,它显示数据的方式,不是我真正想要的(类似:{“域”:“name_domaine1”,“id”:1})。但是,至少列表不再是空的。欢迎希望它能帮助你。
@foreach($domaines as $id => $domaine)
     <option value="{{ $id }}">{{ $domaine }}</option>
@endforeach
$domaines = Domaine::get(['name', 'id']);
<select class="form-control" name="domaine_id">
            @if (empty($domaine_id))                                    
                Whoops! Something went wrong                            
            @else
            @foreach($domaines as $domaine)
              <option value="{{$domaine->id}}">{{$domaine->name}}</option>
            @endforeach
            @endif
</select>
public function create()
{
   $domaines = Domaine::pluck('name', 'id');
   return view('projects.create', compact('domaines'));
}
<select class="form-control" name="domaine_id">
            @if (!count($domaines) > 0)                                    
                Whoops! Something went wrong                            
            @else
            @foreach($domaines as $domaine)
              <option value="{{$domaine->id}}">{{$domaine->name}}</option>
            @endforeach
            @endif
</select>