【问题标题】:Laravel 5.3 Eloquent Model Relationship not working, Returns NULLLaravel 5.3 Eloquent 模型关系不起作用,返回 NULL
【发布时间】:2016-12-17 16:04:43
【问题描述】:

我是 Laravel 的新手,正在为此苦苦挣扎:

数据库 - MSSQL 现有数据库架构无法修改,因为其他软件依赖于它。 (不确定这是否有问题)

模型/表设置: INFO_ALL 表 - ID 是主键 PERSON 表 - ID 是外键

ID 是十六进制值,我注意到 eloquent 从值的开头删除了 0x,但不确定这是否会导致关系失败。示例:在数据库中,我在返回的 eloquent 数据中看到 0x123456789,我看到 123456789

人物模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Person extends Model
{
protected $table = 'PERSON';
protected $primaryKey = 'ID';
public $incrementing = false;
public $timestamps = false;

    public function info_all(){

        return $this->belongsTo(Info_All::class, 'ID', 'ID');
        }
}

信息模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Info_All extends Model
{
protected $table = 'INFO_ALL';
protected $primaryKey = 'ID';
public $incrementing = false;
public $timestamps = false;

    public function person(){

       return $this->hasOne(Person::class, 'ID', 'ID');

    }
}

我如何测试这种关系:

php artisan tinker
$person = App\Person::first();
$person->info;
NULL

php artisan tinker
$info= App\Info::first();
$info->person;
NULL

我知道数据库中存在这种关系,我可以通过查询手动将它们组合在一起,但这个框架的关系特性真的很容易弄清楚。

刚接触 Laravel,有几件事我不确定,例如,如果我声明了 $primaryKey,则关系中的第三个参数是否必要。我在第一个模型中声明了 $primarykey,因为我认为它区分大小写并且我的表的 ID 不是 ID。话虽如此,我已经坚持了几天,感觉我已经测试了每种不同组合的所有内容。

感谢任何帮助。

【问题讨论】:

    标签: php sql-server laravel-5 model eloquent


    【解决方案1】:

    您的关系定义不正确。尝试添加以下关系:

    人物模型

    public function info()
    {
       return $this->hasOne(Info_All::class, 'ID', 'ID');
    }
    

    Info_All 模型

    public function person()
    {
        return $this->belongsTo(Person::class, 'ID', 'ID');
    }
    

    然后在 tinker 中尝试一下:

    $person = App\Person::first();
    $person->info;
    

    我不确定,但如果 eloquent 从值的开头删除 0x,那么它也可能导致问题。

    尝试从您的表格中删除 0x

    【讨论】:

    • info 表中的 ID 多于 Person 表。信息(用户名和权限)可以在没有人(图片、姓名地址)的情况下存在。这有点奇怪,但它是一个现有的数据库,它依赖于我试图通过网络应用程序添加功能的现有软件。所以我相信我的关系是正确的。实际的表名似乎是随机名称,所以我在问题中将它们更改为 Person 和 Info 以使其更易于阅读,但我可能让它有点混乱。
    • 当一个表有一个 FK 时,你必须定义一个 belongsTo 方法。请阅读docs 了解更多信息。
    • 是的,我对表格的描述不正确,但代码中的关系信息正确。信息有一个
    • 个人所属信息
    • 那么请确保您在问题中提供正确的信息,否则对任何人都没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2016-02-29
    • 1970-01-01
    • 2021-08-22
    • 1970-01-01
    • 2016-02-26
    • 2019-03-25
    相关资源
    最近更新 更多