Laravel 如何使用子类正确地获取父类?
我的父子模型定义为:Laravel 如何使用子类正确地获取父类?,laravel,join,orm,Laravel,Join,Orm,我的父子模型定义为: class Contract extends Model { public function customer() { return $this->belongsTo('App\Customer'); } } 在我父母的模型上,也就是说,我有这样一个: public function contracts() { return $this->hasMany('App\Contract', 'customer
class Contract extends Model
{
public function customer()
{
return $this->belongsTo('App\Customer');
}
}
在我父母的模型上,也就是说,我有这样一个:
public function contracts()
{
return $this->hasMany('App\Contract', 'customer_id', 'id');
}
@foreach($contracts as $key => $contract)
<tr>
<td>{{ $contract->id }}</td>
<td>{{ $contract->customer ? $contract->customer->customer_number : '' }}</td>
<td>{{ $contract->customer ? $contract->customer->full_name : '' }}</td>
</tr>
@endforeach
在我的ContractController
中,我使用以下代码将我的客户及其父模型按父字段排序:
$contracts = Contract::where('status', 'Active')->join('customers', 'contracts.customer_id', '=', 'customers.id')->orderBy('customers.customer_number', 'asc')->paginate(100);
我现在的问题是我的合同视图,也就是说,index.blade.php
给了我一个不同的id,但使用它:$contracts=contract::where('status','Active')->paginate(100)代码>工作正常
编辑
至于合同索引视图,我有以下内容:
public function contracts()
{
return $this->hasMany('App\Contract', 'customer_id', 'id');
}
@foreach($contracts as $key => $contract)
<tr>
<td>{{ $contract->id }}</td>
<td>{{ $contract->customer ? $contract->customer->customer_number : '' }}</td>
<td>{{ $contract->customer ? $contract->customer->full_name : '' }}</td>
</tr>
@endforeach
@foreach($key=>$contract)
{{$contract->id}
{{$contract->customer?$contract->customer->customer\u编号:'}}
{{$contract->customer?$contract->customer->全名:'}
@endforeach
我的问题是,这个合同id显示的是另一个。例如,如果在我的数据库中,id为1的合同X属于客户X,则我的视图显示不同的合同id。我认为关系存在问题,处理关系的简单方法是使用如下所示的即时加载:
$contracts = Contract::with(['customers'=> function($query) {
$query->orderBy('customers_number', 'asc');
}])->where('status', 'Active')->paginate(100);
我设法解决了我的问题。而不是使用
$contracts = Contract::where('status', 'Active')->join('customers', 'contracts.customer_id', '=', 'customers.id')->orderBy('customers.customer_number', 'asc')->paginate(100);
我用了这个:
$contracts = Contract::select('contracts.*')->where('status', 'Active')->join('customers', 'contracts.customer_id', '=', 'customers.id')->orderBy('customers.customer_number', 'asc')->paginate(100);
我从中找到的也在视图文件中提供您的代码。可能您试图访问错误的变量不同的查询不同的结果?错误是什么?我的观点很简单,只要{{{$contract->id}{{$contract->customer?$contract->customer->customer\u number:'}}}
在一个循环中。每当我使用它时,它都会给我一个SQL错误:未找到列:1054未知列“customers.customers\u number”
有效,但它不是按我的customer\u number排序的,而是根据我的合同
id对其进行排序。