* @property int $id
* @property string $text
* @property string $html
- * @property int|null $parent_id
+ * @property int|null $parent_id - Relates to local_id, not id
* @property int $local_id
* @property string $entity_type
* @property int $entity_id
+ * @property int $created_by
+ * @property int $updated_by
*/
class Comment extends Model implements Loggable
{
*/
public function parent(): BelongsTo
{
- return $this->belongsTo(Comment::class);
+ return $this->belongsTo(Comment::class, 'parent_id', 'local_id', 'parent')
+ ->where('entity_type', '=', $this->entity_type)
+ ->where('entity_id', '=', $this->entity_id);
}
/**
$prefs = new UserNotificationPreferences($editor);
$prefs->updateFromSettingsArray(['comment-replies' => 'true']);
+ // Create some existing comments to pad IDs to help potentially error
+ // on mis-identification of parent via ids used.
+ Comment::factory()->count(5)
+ ->for($entities['page'], 'entity')
+ ->create(['created_by' => $this->users->admin()->id]);
+
$notifications = Notification::fake();
$this->actingAs($editor)->post("/comment/{$entities['page']->id}", [
'text' => 'My new comment'
]);
- $comment = $entities['page']->comments()->first();
+ $comment = $entities['page']->comments()->orderBy('id', 'desc')->first();
$this->asAdmin()->post("/comment/{$entities['page']->id}", [
'text' => 'My new comment response',
- 'parent_id' => $comment->id,
+ 'parent_id' => $comment->local_id,
]);
$notifications->assertSentTo($editor, CommentCreationNotification::class);
}