Laravel雄辩关系用户ID问题

时间:2016-09-12 20:24:21

标签: php laravel laravel-5 eloquent laravel-5.3

我目前有很多桌子,但为了简单起见,我将展示两个受影响的桌子。它们包括:

  • 用户
  • 公布

一个用户可以有多个通知,一个通知只属于一个用户。这似乎是一对多关系(或者我认为)。

数据库的模式创建:

Schema::create('X_USER', function($table)
    {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password', 60);
        $table->rememberToken();
        $table->timestamps();
    });

Schema::create('X_ANNOUNCE', function (Blueprint $table) 
    {           
        $table->increments('id');
        $table->integer('created_by')->unsigned();
        $table->foreign('created_by')->references('id')->on('X_USER')->onDelete('cascade');
        $table->timestamps();
    });

现在模型也很简单我在用户模型上有这个:

public function announces()
{
    return $this->hasMany('App\Announce', 'created_by');
}

这是宣布模型:

public function user()
{
    return $this->belongsTo('App\User', 'created_by');
}

当我插入通知时,我在我的laravel AnnounceController.php(商店功能)上执行以下操作:

$announce = Announce::create($request->all());

return Response::json([
            'message' => 'Announce Created Succesfully',
            'data' => $this->transform($announce)
    ]);

前一行实际上正确地插入了数据库中的所有内容。到目前为止没有任何错误,直到我执行“转换”,返回我想要传递给前端的格式的json:

private function transform($announce)
{
    //Get User
    $user = Announce::find($announce['created_by'])->user;

    return [
           'announce_id'            => $announce['id'],
           'announce_title'         => $announce['title'],
           'announce_user_id'       => $user->id,
           'announce_created_by'    => $user->name,
        ];
}

当我$user = Announce::find($announce['created_by'])->user时,我从未获得正确的ID($ user-> id)。但是,$ user-> id和$ user->名称是连贯的,只是不正确的名称。我已经检查过id($ announce ['created_by'])也是正确的。

非常感谢任何帮助,我理解这个问题并不是最常见的问题,但是在尝试了太多时间,检查堆栈和教程之后我会变得疯狂。

1 个答案:

答案 0 :(得分:0)

使用find方法时,您正在按ID搜索,我认为,正确的方法是:

$user = Announce::where('created_by', $announce['created_by'])->first()->user;

但实际上我觉得这没有多大意义,因为对于transform方法来说,使用这样的代码就足够了:

此外,您应该可以使用tranform方法的代码:

private function transform($announce)
{
    return [
           'announce_id'            => $announce->id,
           'announce_title'         => $announce->title,
           'announce_user_id'       => $announce->user->id,
           'announce_created_by'    => $announce->user->name,
        ];
}