Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Создал БД
posts
id - integer
title - string
body - text
videosid - integer
title - string
url - string
commentsid - integer
body - text
commentable_id - integer
commentable_type - string
Для каждой Модели определил отношения
class Comment extends Model
{
/**
* Get all of the owning commentable models.
*/
public function commentable()
{
return $this->morphTo();
}
}
class Post extends Model
{
/**
* Get all of the post's comments.
*/
public function comments()
{
return $this->morphMany('App\Comment', 'commentable');
}
}
class Video extends Model
{
/**
* Get all of the video's comments.
*/
public function comments()
{
return $this->morphMany('App\Comment', 'commentable');
}
}
В контроллере написано
public function index()
{
$comment = App\Comment::find(1);
$commentable = $comment->commentable;
dd( $commentable);
}
Но мне выдает ошибку
FatalErrorException in Model.php line 827: Class 'post' not found
В базе пробовал менять название commentable_type на Post все равно ошибка.введите сюда описание изображения
Что мне сделать чтобы отношения работали?
Не в сети
Возможно с namespace что-то, commentable_type должен содержать App\Post, App\Video, у тебя там хранятся короткие названия, их, вроде, можно биндить.
Посмотри http://stackoverflow.com/questions/2786 … 3#27909753
Не в сети
Да, я это не заметил в Документации.
Владельца полиморфного отношения я могу получить
$comment = App\Comment::find(1);
$commentable = $comment->commentable;
Но не работает получение всех комментариев. Он вообще почему-то составляет неправильный запрос
$post = App\Post::find(1);
foreach ($post->comments as $comment) {
//
}
В итоге возникает ошибка
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'posts.commentable_id' in 'where clause' (SQL: select * from `posts` where `posts`.`commentable_id` = 1 and `posts`.`commentable_id` is not null and `posts`.`commentable_type` = post)
Не в сети
В базе пробовал менять название commentable_type на Post все равно ошибка
скриншот всё объясняет. в _type сохраняется имя класса модели, для Post это будет App\Post конечно. создай связь один раз в пхп-коде (например через php artisan tinker) и сразу увидишь как оно работает. от класса модели просто берётся ::class а он содержит полностью квалифицированное имя начиная с корневого неймспейса
Не в сети
Все разобрался, всем спасибо
Не в сети
Страницы 1