我有一个包含3个表的数据库:user
,statuses
和friends
。
我的状态表有一个关系列“父ID”,它是NULL但存储了回复状态的用户的user_id
。以下是我的 Status.php 代码:
namespace Pictogram\Models;
use Illuminate\Database\Eloquent\Model;
class Status extends Model
{
protected $table = 'statuses';
protected $fillable = [
'body'
];
public function user()
{
return $this->belongsTo('Pictogram\Models\User', 'user_id');
}
public function scopeNotReply($query)
{
return $query->whereNull('parent_id');
}
public function replies()
{
return $this->hasMany('Pictogram\Models\Status', 'parent_id');
}
}
并且来自我的路线文件:这控制回复状态
Route::post('/status', [
'uses' => '\Pictogram\Http\Controllers\StatusController@postStatus',
'as' => 'status.post',
'middleware' => ['auth'],
]);
Route::post('/status/{statusId}/reply', [
'uses' => '\Pictogram\Http\Controllers\StatusController@postReply',
'as' => 'status.reply',
'middleware' => ['auth'],
]);
我的状态控制器.php
class StatusController extends Controller
{
public function postStatus(Request $request)
{
$this->validate($request, [
'status' => 'required',
]);
Auth::user()->statuses()->create([
'body' => $request->input('status'),
]);
return redirect()
->route('home')
->with('info', 'Status updated.');
}
public function postReply(Request $request, $statusId)
{
$this->validate($request, [
"reply-{$statusId}" => 'required',
], [
'required' => 'The reply body is required.'
]);
$status = Status::notReply()->find($statusId);
if (!$status) {
return redirect()->route('home');
}
if (!Auth::user()->isFriendsWith($status->user) && Auth::user()->id !== $status->user->id)
{
return redirect()->route('home');
}
$reply = Status::create([
'body' => $request->input("reply-{$statusId}"),
])->user()->associate(Auth::user());
$status->replies()->save($reply);
return redirect()->back();
}
}
最后,这是下面的模型.php的第2673行:
protected function getRelationshipFromMethod($method)
{
$relations = $this->$method();
if (! $relations instanceof Relation) {
throw new LogicException('Relationship method must return an object of type '
.'Illuminate\Database\Eloquent\Relations\Relation');
}
return $this->relations[$method] = $relations->getResults();
}
我使用的是Laravel 5.2。现在我的问题是回复被保存到表中,因为空parent_id
然后获取回复的用户的user_id
,但随后它会显示一个错误页面,其中包含以下错误。
Error1/2
答案 0 :(得分:1)
确保您的关系名称在状态模型中正确。 检查状态模型中的回复()实现。 它返回状态关系我应该是回复的实际,即回复
public function replies()
{
return $this->hasMany('Pictogram\Models\Reply', 'parent_id');
}