В категориях моделей я написал:
public function getRouteKeyName(){
return 'alias';
}
Колонка псевдонима belogns модели CategoriesTranslations.
Как я могу вернуть псевдоним из модели CategoriesTranslations?
Мой код не работает.
Я пытался:
Добавить getRouteKeyName в CategoriesTranslations:
public function getRouteKeyName(){
return 'alias';
}
И в Категории добавить:
public function categoryTranslations() {
return $this->hasOne(CategoriesTranslations::class);
}
public function getRouteKeyName() {
return $this->categoryTranslations->getRouteKeyName();
}
Я получаю ошибку Call to a member function getRouteKeyName() on null, когда хочу показать категорию с помощью getRouteKeyName. Как это исправить?






Вы должны использовать отношения между категориями и переводами категорий.
В вашей модели категорий:
public function categoriesTranslations()
{
return $this->hasMany(CategoriesTranslations::class);
}
public function getRouteKeyName()
{
$this->categoryTranslations->where('locale', Auth::user()->locale)->first()->getRouteKeyName();
}
Теперь вы можете вызвать getRouteKeyName() из любого экземпляра модели «Категории», и он будет извлекать ее из таблицы «КатегорииТрансляций».
** Возможное исправление здесь заключалось в добавлении оператора where() и метода first(). Измените Auth::user()->locale на то, где вы храните, какой языковой стандарт использовать.
Не могли бы вы пояснить отношения между двумя моделями? Есть ли несколько переводов категорий для каждой категории?
Да. В CategoriesTranslations у меня есть даты для нескольких категорий.
@Tatata, я немного обновил свой ответ. Посмотрите, работает ли это для вас. Тем не менее, нам все еще нужно определить правильные отношения. Это сработает, если это будет один на один. Если это один ко многим, это немного изменит ситуацию!
Итак, вам нужно имя ключа маршрута для ПЕРВОГО, связанного с CategoriesTranslations? Представьте себе: если мы вызвали $category->categoryTranslations, мы можем получить 3 возвращенных экземпляра CategoriesTranslations. От какого из них вы хотите получить имя ключа маршрута? Первое?
Вызов функции-члена getRouteKeyName () при значении null. Я получаю эту ошибку.
@Tatata, можешь ответить на вопрос сверху?
@Tatata, возможно, вы обновили вопрос, но вы так и не ответили на МОЙ ВОПРОС в комментариях о том, какие отношения использовать. Если обнаружено несколько категорийTranslations, какую из них вы хотите использовать для поиска имени ключа маршрута? Вы не можете использовать их все. Вы должны выбрать один. Кроме того, вы больше не можете использовать метод hasOne, если хотите отношения «один ко многим». Используйте документацию Laravel, чтобы узнать, как устанавливать отношения: laravel.com/docs/5.6/eloquent-relationships#one-to-many
Это не ответ на мой вопрос. Мы здесь, чтобы ПОМОЩЬ, а не делать работу за вас.
У меня в category_translations несколько категорий. ключ: category_id принадлежит таблице category.id. См., Пожалуйста, структуру таблицы category_translations: imgur.com/a/swNhf Я пробовал использовать hasMany, ownTo. Не работает. Я всегда получаю: метода getRouteKeyName не существует. Мне нужно установить столбец alias для модели категорий.
Думаю, теперь я знаю, в чем проблема. См. Мой исправленный ответ.
Call to a member function getRouteKeyName() on nullЗабудьте пока о методе getRouteKeyName()! Это не помогает! Сосредоточьтесь на отношениях и сделайте это в первую очередь. Это причина того, что вы получаете нулевую ошибку. Попробуйте использовать dd($category->categoriesTranslations); или метод "die and dump".
Я хочу ввести модель страницы в контроллер через маршрут. Модель страницы использует модель PageSlug, которая должна быть проверена по ее заголовку и столбцу языкового стандарта. (2 переменные в маршруте выглядят так: {lang} / pages / {slug}) Кто-нибудь знает, возможно ли это? @GoogleMac
Мне нужно вернуть «псевдоним» из модели CategoriesTranslations в модели Categories. Как я могу это сделать?
return $category->categoryTranslations->getRouteKeyName();?