Laravel BelongsTo 返回空对象
Laravel BelongsTo returning empty object
我有一个 table 叫做消息和用户。用户是由 laravel auth 生成的默认用户 table。出于某种原因,当我尝试 return
时,在我的控制器中的 postMessage 函数中
return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner()]);
关系运送 return 是一个空对象。我知道 MessageOwner
关系有效,因为我在不同的函数中使用它并且它工作正常但我不明白为什么它在这里不起作用?我确定它存储了 user_id 并且它是正确的 ID。
请注意,它会 return 消息。
这里是向上迁移函数
Schema::create('messages', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users');
$table->longText('message');
$table->timestamps();
});
这是我的消息模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Message extends Model
{
protected $table = 'messages';
protected $fillable = [
'user_id', 'message'
];
public function user()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
public function MessageOwner()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
public function job()
{
return $this->belongsToMany(Job::class);
}
}
这是我的控制器函数
public function postMessage(Request $request)
{
try {
$message = Message::create([
'user_id' => $request->input('user_id'),
'message' => $request->input('message')
]);
$job = Job::find($request->input('job_id'));
$job->messages()->attach($message);
$broadcastMessage = Message::find($message->id);
return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner()]);
event(new MessagePushed($broadcastMessage));
return response()->json([
'success' => true,
'message' => 'success',
]);
} catch (\Exception $exception) {
return response()->json([
'success' => false,
'error' => true,
'message' => $exception->getMessage()
], 500);
}
}
您正在调用关系方法,而不是它的值。
尝试不使用 ()
:
return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner]);
您还应该考虑对所有关系方法使用 lower_snake_case 并将外键命名为 relationshio_name_id
,这样您就不需要手动定义外键名称,Laravel 会自动猜出来
我有一个 table 叫做消息和用户。用户是由 laravel auth 生成的默认用户 table。出于某种原因,当我尝试 return
时,在我的控制器中的 postMessage 函数中return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner()]);
关系运送 return 是一个空对象。我知道 MessageOwner
关系有效,因为我在不同的函数中使用它并且它工作正常但我不明白为什么它在这里不起作用?我确定它存储了 user_id 并且它是正确的 ID。
请注意,它会 return 消息。
这里是向上迁移函数
Schema::create('messages', function (Blueprint $table) {
$table->bigIncrements('id');
$table->bigInteger('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users');
$table->longText('message');
$table->timestamps();
});
这是我的消息模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Message extends Model
{
protected $table = 'messages';
protected $fillable = [
'user_id', 'message'
];
public function user()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
public function MessageOwner()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
public function job()
{
return $this->belongsToMany(Job::class);
}
}
这是我的控制器函数
public function postMessage(Request $request)
{
try {
$message = Message::create([
'user_id' => $request->input('user_id'),
'message' => $request->input('message')
]);
$job = Job::find($request->input('job_id'));
$job->messages()->attach($message);
$broadcastMessage = Message::find($message->id);
return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner()]);
event(new MessagePushed($broadcastMessage));
return response()->json([
'success' => true,
'message' => 'success',
]);
} catch (\Exception $exception) {
return response()->json([
'success' => false,
'error' => true,
'message' => $exception->getMessage()
], 500);
}
}
您正在调用关系方法,而不是它的值。
尝试不使用 ()
:
return response()->json(['s' => $broadcastMessage, 'r' => $broadcastMessage->MessageOwner]);
您还应该考虑对所有关系方法使用 lower_snake_case 并将外键命名为 relationshio_name_id
,这样您就不需要手动定义外键名称,Laravel 会自动猜出来