Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.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
Php Laravel 6在belongsTo关系上使用with()时,仅*有时*返回null_Php_Mysql_Laravel_Laravel 6_Eager Loading - Fatal编程技术网

Php Laravel 6在belongsTo关系上使用with()时,仅*有时*返回null

Php Laravel 6在belongsTo关系上使用with()时,仅*有时*返回null,php,mysql,laravel,laravel-6,eager-loading,Php,Mysql,Laravel,Laravel 6,Eager Loading,我正在从事一个项目,在该项目中,我们有一个服务提供商的模型、提供的护理类型和状态: 提供者: class Provider extends Model { protected $table = 'providers'; public function status() { return $this->belongsTo('App\Status'); } public function caretype() { return

我正在从事一个项目,在该项目中,我们有一个服务提供商的模型、提供的护理类型和状态:

提供者:

class Provider extends Model
{
    protected $table = 'providers';

    public function status() {
        return $this->belongsTo('App\Status');
    }

    public function caretype() {
        return $this->belongsTo('App\CareType', 'id');
    }
}
护理类型:

class CareType extends Model
{
    protected $table = 'type_of_care';

    public function providers() {
        return $this->hasMany('App\Providers', 'type_of_care_id');
    }

    public function category() {
        return $this->belongsTo('App\CareCategory');
    }
}
地位:

class Status extends Model
{
    protected $table = 'status';

    public function providers() {
        return $this->hasMany('App\Providers');
    }
}
在my
SearchController
(处理提供者搜索请求的控制器)上,使用eager load的
show()
函数可以完美地检索
caretype
。但是在列出搜索结果集合的
search()
函数中,
caretype
始终列为空

我不明白为什么它在一个函数中工作而在另一个函数中不工作,特别是当两个函数中的代码完全相同时:

public function search(Request $request)
    {

        $validated = $request->validate([
            //I removed the validation code for this post
        ]);

        $providers = Provider::with(['status', 'caretype'])->get();

        return view('search.results', ['providers' => $providers]);

    }

    public function show($id)
    {

        $single_provider = Provider::with(['status', 'caretype'])->where('id', $id)->first();
        return view('search.details', ['provider' => $single_provider]);

    }

在此方面的任何帮助都将不胜感激。我知道模型和关系外键是正确定义的,因为
show()
函数能够很好地获取
caretype

否。您的关系和外键不正确。从

Eloquent通过检查relationship方法的名称并在方法名称后面加上一个
\uu
,后跟主键列的名称来确定默认外键名称。但是,如果子模型上的外键不是这样,则可以将自定义键名作为第二个参数传递给belongsTo方法

您正在将
id
列作为外键传递给
Provider
model的
caretype
relation,但您的外键是
type of\u care\u id
。因此,当id匹配时会得到一些结果,如果不匹配,则会得到null。将您的关系代码更改为

public function caretype()
{
    return $this->belongsTo('App\CareType', 'type_of_care_id');
}
现在又是医生说的

如果父模型未使用
id
作为主键,或者希望将子模型联接到其他列,则可以将第三个参数传递给
belongsTo
方法,指定父表的自定义键


在您的情况下,
id
是主键。因此,您不必传递第三个参数。只要更新主键引用,一切都会完美工作。

哦,天哪,我完全混淆了模型中关系的方向。这把它修好了。非常感谢。