我目前有很多桌子,但为了简单起见,我将展示两个受影响的桌子。它们包括:
一个用户可以有多个通知,一个通知只属于一个用户。这似乎是一对多关系(或者我认为)。
数据库的模式创建:
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'])也是正确的。
非常感谢任何帮助,我理解这个问题并不是最常见的问题,但是在尝试了太多时间,检查堆栈和教程之后我会变得疯狂。
答案 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,
];
}