php - laravel 中的一对多关系显示在视图中
问题描述
我正在开发laravel电话簿应用程序我希望每个电话簿都有一个客户,但客户属于许多电话簿我的电话簿表中有一个名为client_id的列现在当我设置关系时如何在控制器中使用它们并将其传递给视图在对象上,这是我的一些代码
电话簿控制器
public function index(){
$phonebooks = Phonebook::all();
$client = Phonebook::find(?dont know if its right place for it?)->client;
return view('admin.phonebooks.index',compact('phonebooks',$phonebooks),compact('client',$client));}
电话簿型号
class Phonebook extends Model{protected $fillable = ['title','description','client_id','calldate','rememberdate'];public function client() {
return $this->hasOne('App\Client','id');} }
电话簿数据库迁移
Schema::create('phonebooks', function (Blueprint $table) {
$table->increments('id');
$table->text('title');
$table->longText('description');
$table->integer('client_id');
$table->dateTime('calldate');
$table->dateTime('rememberdate');
$table->timestamps();
});
和客户端数据库迁移
Schema::create('clients', function (Blueprint $table) {
$table->increments('id');
$table->text('title');
$table->longText('description');
$table->integer('fax');
$table->text('adrress1');
$table->integer('telephone1');
$table->timestamps();
});
以及我想在其中展示的视图
@foreach($phonebooks as $phonebook)
<tr>
<th scope="row">{{$phonebook->id}}</th>
<th scope="row">{{$phonebook->title}}</th>
<td><a href="/admin/phonebooks/{{$phonebook->id}}">{{$phonebook->description}}</a></td>
<td>{{$phonebook->calldate}}</td>
<td>{{$phonebook->created_at->toFormattedDateString()}}</td>
<td>{{$client->title}}</td>
<td>
<div class="btn-group" role="group" aria-label="Basic example">
<a href="{{ URL::to('admin/phonebooks/' . $phonebook->id . '/edit') }}">
<button type="button" class="btn btn-warning">edit</button>
</a>
<form action="{{url('admin/phonebooks', [$phonebook->id])}}" method="POST">
<input type="hidden" name="_method" value="DELETE">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="submit" class="btn btn-danger" value="delete"/>
</form>
</div>
</td>
</tr>@endforeach
解决方案
我建议使用急切加载来加载所有客户端,这样效率会更高,您可以在文档中阅读原因
您可以在控制器上执行此操作:
public function index()
{
$phonebooks = Phonebook::with('client')->get();
return view('admin.phonebooks.index',compact('phonebooks',$phonebooks);
}
然后在您看来,由于您定义的关系,您可以访问电话簿客户端:
@foreach ($phonebooks as $phonebook)
{{ $phonebook->client->title }}
@endforeach
推荐阅读
- javascript - 在不影响 PageSpeed 的情况下加载第三方 JS
- django - 从购物车中删除按钮在 django 中不起作用?
- ios - 返回屏幕后释放 UITableViewCell 的高亮状态
- azure - PowerBI MicrosoftAzureConsumptionInsights - 更改查询以获得超过 2 个月
- c++ - macOS Catalina 录屏权限
- java - JPA Postgres - 无法将动态 JSON 转换为 Java 类型
- matlab - 在 uitab 上创建具有多个轴的图。在 Matlab 中使用 addaxis
- java - Java 8:如何检查对象的所有字段是否为 NULL,除了一个
- user-interface - 我想从剪贴板复制、粘贴和剪切 CEdit 中的内容
- powershell-3.0 - 在 power-shell 工作流中使用 CSV 导入