我得到了这种形式,您可以在其中选择一个客户端,并将client_id插入数据库中
<div class="form-group">
<label for="clientId">Client</label>
<select name="client_id" class="form-control">
@foreach($clients as $client)
<option value="{{$client->client_id}}">
{{$client->client_name}}
</option>
@endforeach
</select>
</div>
<div class="form-group">
<button type="submit" class="btn btn-success">Submit</button>
</div>
我的项目负责人是这个
public function index()
{
return view('projects.index', [
'projects' => Project::all(),
'client' => Client::all(),
]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
if (Auth::user()->role != 'admin') {
return redirect()->back();
} else {
return view('projects.create',[
'project' => new Project,
'clients' => Client::all(),
]);
}
}
所以我想显示每个项目的client_id中的客户端名称,这是我的索引
<tbody class="">
@foreach ($projects as $project)
<tr>
<td>{{ $project->proj_id }}</td>
<td>{{ $project->proj_title }}</td>
<td>{{ $project->proj_desc }}</td>
<td>{{ $project->client->client_name }}</td>
<td>{{ $project->created_by }}</td>
<td>{{ $project->created_at }}</td>
@if (Auth::user()->role == 'admin')
<td>
客户端模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Client extends Model
{
protected $primaryKey = 'client_id';
protected $fillable = ['client_name','client_id'];
public function projects () {
return $this->hasMany('App\Project');
}
}
项目模型:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Project extends Model
{
protected $primaryKey = 'proj_id';
protected $fillable = [
'proj_title',
'proj_desc',
'client_id',
'created_by'
];
public function clients (){
return $this->hasOne('App\Client');
}
}
那么,如何从索引中检索数据?我尝试过像文档中那样,但是总是出现错误。
谢谢。
答案 0 :(得分:3)
由于客户可以拥有一个/很多项目,因此您应该在项目模型上定义该关系的逆关系。这将变成:一个项目属于一个客户。
在代码中: 项目模型
public function client()
{
return $this->belongsTo('App\Client');
}
您还可能注意到这种反向关系,因为您将外键( client_id )存储在 projects 表中。
如果您使用has one
,Laravel会在相关模型表中查找外部列(在您的示例中为clients
)。
注意:在您的视图中,您正在呼叫client->client_name
,但已将关系定义为clients
(复数)。我将关系重命名为client
(单数形式),以更好地描述它
答案 1 :(得分:0)
在您的项目控制器中:
return view('projects.index', [
'projects' => Project::with('clients')->get(),
]);
您认为:
<td>{{$project->clients->client_name}}</td>
尽管您是hasOne关系,但您在Project模型上将project-> client关系命名为客户。
我还要将project-> client关系定义为BelongsTo
,而不是HasOne
。