Редактировать
я, возможно, уже поняли в первый раз. Если вы хотите, чтобы проверить, что модель сохраняется в commentable_type
существует вы могли бы сделать что-то вроде этого:
$type = $comment->commentable_type;
if(class_exists($type)) echo "it exists";
В зависимости от ваших потребностей вы можете сделать дополнительные проверки для его inheritance (например, что он расширяет класс Model
). Или что-нибудь еще, что действительно соответствует вашим потребностям.
Edit2
Это то, что я буду делать, если я вам. Я бы добавил свойство protected $allRelations
к вашей модели Comment
и вручную установил все отношения. Затем создайте некоторые вспомогательные модели, чтобы проверить, находится ли он в массиве.
Простой пример:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Comment extends Model
{
// ..
protected $allRelations= [
'posts' => '\App\Post',
'videos' => '\App\Video',
];
public static function validateRelationNs($ns) {
return in_array($ns, $this->allRelations);
}
public static function validateRelationName($name) {
return array_key_exists($name, $this->allRelations);
}
// ...
}
Старый ответ:
Laravel ожидает полное имя пространства имен модели для колонок полиморфных типа (в вашем случае commentable_type
должен быть \Full\Ns\Post
, не posts
).
Самый простой способ обеспечить правильность - это всегда сохранять его through the relationship. Например:
$post = Post::first();
$comment = new Comment($attributes);
$post->comments()->save($comment).
Это автоматически устанавливается как commentable_id
и commentable_type
правильно (если ваш relationsare правильно определен).
Дополнительная проверка
Другое то, что вы можете проверить с помощью модели events. Вы можете проверить его перед сохранением в базе данных.
Я думаю, что эти данные должны быть проверены, прежде чем пытаться вставить в базе данных. Как-то все модели, связанные с моделью комментариев, на этапе валидации. – random425
О, так вы хотите проверить, действительно ли модель существует после получения json уже сохраненного комментария? Я неправильно понял первый раз. – devk
Не совсем, я хочу проверить, существует ли модель и является ли она полиморфной, в данном случае модель комментариев. – random425