当前位置: 首页 > 知识库问答 >
问题:

Null值对一对一的关系Laravel 7

贺俊杰
2023-03-14

我有一个一对一的关系之间的用户(pengganas)表和角色表,但当我在控制器中访问它返回null和列未找到

Route.php

Route::get('/test', 'PenggunaController@index');

PenggunaController.php

使用App\Pengguna;

class PenggunaController extends Controller
{
    public function index()
    {
        $pengguna = Pengguna::find(3);
        return response()->json([
            'data' => $pengguna
        ]);
    }
}

迁移

创建_penggunas_表

public function up()
{
    Schema::create('penggunas', function (Blueprint $table) {
        $table->id();
        $table->string('username');
        $table->unsignedBigInteger('role_id');

        $table->foreign('role_id')->references('id')->on('roles');
    });
}

创建\u角色\u表

public function up()
{
    Schema::create('roles', function (Blueprint $table) {
        $table->id('id');
        $table->string('role_name')->unique();
    });
}

模型

Pengguna.php

public function role()
{
    return $this->hasOne('App\Role');
}

Role.php

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

因此,在PenggunaController.php的方法索引上,我正在获取id=3的数据。返回完整数据时,会显示role_id,但是如果我像$pengguna_role=$pengguna那样访问它-

SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“roles.pengguna_id”(SQL:select*fromroleswhererolespengguna_id=3和rolespengguna_id不是空限制1)

我可以通过在User::find(3)的结果中使用角色_id来解决这个问题 Role::where('id',$pengguna-


共有1个答案

赵智
2023-03-14

你的关系定义在这里是错误的。它被恢复了。作为用户有角色id,它应该属于角色类。你正在使用hasOne,laravel正在角色表中寻找pengguna_id,但是没有。所以你变空了。像这样改变它

public function role() {
    return $this->belongsTo('App\Role', 'role_id');
}

然后你可以获得价值,比如

$pengguna_role = $pengguna->role->role_name;

我认为,一个角色可能有不同的用户。所以在角色模型中使用has很多

public function penggunas() {
    return $this->hasMany('App\Pengguna', 'role_id');
}
 类似资料:
  • 问题内容: 我在Hibernate中具有以下一对一关系(可能为null): 我正在尝试使用HQL选择所有具有非空详细信息的实体: 但这会返回所有实体,无论详细信息是否为空。 那么正确的HQL是什么? 问题答案: 好的,我找到了解决方案:

  • 让我们来理解MS Access中的一对一关系。 这种关系用于将一个表中的一条记录与另一个表中的一条记录相关联。 现在转到 数据库工具 选项卡。 点击关系 选项。然后选择和,然后单击添加按钮将它们添加到视图中,然后关闭显示表格对话框。如下图所示 - 要创建这两个表之间的关系,请使用鼠标,然后单击并按住Employees 中的字段,然后将该字段拖放到要关联的字段上,方法是将鼠标悬停在tblHRData

  • 问题内容: 我正在尝试在MySQL数据库中实现“一对一”的关系。例如,假设我有一个Users表和一个Accounts表。我想确保一个用户只能拥有一个帐户。每个用户只能有一个帐户。 我找到了两个解决方案,但是不知道该使用什么,还有其他选择。 第一个解决方案: 在此示例中,我在指向用户主键的帐户中定义外键。然后,我使外键成为唯一键,因此帐户中不能有两个相同的用户。要联接表,我将使用以下查询: 第二种解

  • 我试图在MySQL数据库中实现“一对一”的关系。例如,假设我有一个Users表和一个Accounts表。我想确保一个用户只能有一个帐户。每个用户只能有一个帐户。 我找到了两个解决方案,但不知道该用什么,还有其他的选择。 在本例中,我定义了指向用户中主键的帐户中的外键。然后我使外键唯一,所以帐户中不能有两个相同的用户。要联接表,我将使用以下查询: null 如果我将这些解决方案中的任何一个导入到My

  • 问题内容: 我在执行查询时遇到问题。我想做的是通过MyDomainB的查询来查询MyDomainA中“字符串代码”中的数据。表之间的关系是单向一对一的。 可以使用gorm方法来做到这一点吗? 域A: 表域A 域B :(具有单向关系) } 表域B 我想做的是知道有多少用户具有相同的代码(代码是DomainA的一列,并且两个表都具有我之前指出的单向关系)。 这是我正在尝试这样做是错误的…控制器: 我希