Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 如何使用子类正确地获取父类?_Laravel_Join_Orm - Fatal编程技术网

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对其进行排序。