如何解决有关系时如何设置字段可以为空
我遇到一个问题,当我删除与该住宅相关的承包商时,在索引视图trying to get property name
的这一行中将出现类似<li>Contractor: {{$res->contractor->name}}
的错误。我想通过删除承包商来实现这一点,那么住宅视图中的承包商字段可以为空或为空。反之亦然。我怎样才能做到这一点?这是我的模特。
Residential.php
class Residential extends Model
{
protected $fillable = ['name','res_code','postcode','city','state','image','contractor_id'];
public function contractor()
{
return $this->belongsTo(Contractor::class);
}
public function buyer()
{
return $this->hasMany(Buyer::class);
}
}
Contractor.php
class Contractor extends Model
{
protected $table = 'contractors';
protected $fillable = ['name','address','phone_no','email','avatar'];
public function residential()
{
return $this->hasMany(Residential::class);
}
public function users()
{
return $this->morphMany(User::class,'typable');
}
}
这是我的控制者。
ResidentialController.php
class ResidentialController extends Controller
{
public function index(Request $request)
{
$contractor = Contractor::find($request->id);
$residential = Residential::all();
return view('residentials.index',compact('residential','contractor'));
}
ContractorController.php
public function index(Request $request)
{
$residential = Residential::find($request->id);
$contractor = Contractor::all();
return view('admins.contractors.index','contractor'));
}
这是我的看法。
residentials \ index.blade.php
@foreach($residential as $res)
<div class="panel-body">
<ul class="list-unstyled list-justify">
<li>ID: {{$res->id}}</li>
<li>Code: {{$res->res_code}}</li>
<li>Postcode: {{$res->postcode}}</li>
<li>City: {{$res->city}}</li>
<li>State: {{$res->state}}</li>
<li>Contractor: {{$res->contractor->name}}
</ul>
</div>
@endforeach
contractors \ index.blade.php
<table class="table table-hover" id="contractor-table">
<tr>
<th>ID</th>
<th>Company</th>
<th>Phone No</th>
<th>Email</th>
<th>Residence</th>
<th>Action</th>
</tr>
@foreach($contractor as $cont)
<tr class="contractor{{$cont->id}}">
<td>{{$cont->id}}</td>
<td><a href="/contractor/{{$cont->id}}/profile">{{$cont->name}}</a></td>
<td>{{$cont->phone_no}}</td>
<td>{{$cont->email}}</td>
<td>{{$cont->residential->pluck('name')->implode(',')}}</td>
@endforeach
</table>
我希望有人能理解我的问题并能帮助我。
解决方法
您必须在查询中使用LEFT JOIN
。使用它会自动接收NULL
的值。
SQL LEFT JOIN返回左表中的所有行,即使右表中没有匹配项也是如此。这意味着如果ON子句与右表中的0(零)条记录匹配;联接仍将在结果中返回一行,但右表的每一列中都为NULL。
这意味着左联接返回左表中的所有值,再加上右表中的匹配值;如果没有匹配的谓词,则返回NULL。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。