GetRouteByKeyName другая модель laravel

У меня две модели:

  • Категории
  • КатегорииПереводы

В категориях моделей я написал:

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. Как это исправить?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
211
1

Ответы 1

Вы должны использовать отношения между категориями и переводами категорий.

В вашей модели категорий:

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 в модели Categories. Как я могу это сделать? return $category->categoryTranslations->getRouteKeyName(); ?

Tatata 13.03.2018 13:42

Не могли бы вы пояснить отношения между двумя моделями? Есть ли несколько переводов категорий для каждой категории?

parker_codes 13.03.2018 14:07

Да. В CategoriesTranslations у меня есть даты для нескольких категорий.

Tatata 13.03.2018 14:10

@Tatata, я немного обновил свой ответ. Посмотрите, работает ли это для вас. Тем не менее, нам все еще нужно определить правильные отношения. Это сработает, если это будет один на один. Если это один ко многим, это немного изменит ситуацию!

parker_codes 13.03.2018 14:11

Итак, вам нужно имя ключа маршрута для ПЕРВОГО, связанного с CategoriesTranslations? Представьте себе: если мы вызвали $category->categoryTranslations, мы можем получить 3 возвращенных экземпляра CategoriesTranslations. От какого из них вы хотите получить имя ключа маршрута? Первое?

parker_codes 13.03.2018 14:12

Вызов функции-члена getRouteKeyName () при значении null. Я получаю эту ошибку.

Tatata 13.03.2018 14:16

@Tatata, можешь ответить на вопрос сверху?

parker_codes 13.03.2018 14:31

@Tatata, возможно, вы обновили вопрос, но вы так и не ответили на МОЙ ВОПРОС в комментариях о том, какие отношения использовать. Если обнаружено несколько категорийTranslations, какую из них вы хотите использовать для поиска имени ключа маршрута? Вы не можете использовать их все. Вы должны выбрать один. Кроме того, вы больше не можете использовать метод hasOne, если хотите отношения «один ко многим». Используйте документацию Laravel, чтобы узнать, как устанавливать отношения: laravel.com/docs/5.6/eloquent-relationships#one-to-many

parker_codes 13.03.2018 14:47
github.com/dimsav/laravel-translatable Я использую этот пакет. См. Структуру моделей.
Tatata 13.03.2018 15:13

Это не ответ на мой вопрос. Мы здесь, чтобы ПОМОЩЬ, а не делать работу за вас.

parker_codes 13.03.2018 15:36

У меня в category_translations несколько категорий. ключ: category_id принадлежит таблице category.id. См., Пожалуйста, структуру таблицы category_translations: imgur.com/a/swNhf Я пробовал использовать hasMany, ownTo. Не работает. Я всегда получаю: метода getRouteKeyName не существует. Мне нужно установить столбец alias для модели категорий.

Tatata 13.03.2018 15:42

Думаю, теперь я знаю, в чем проблема. См. Мой исправленный ответ.

parker_codes 13.03.2018 16:33
Call to a member function getRouteKeyName() on null
Tatata 13.03.2018 16:46

Забудьте пока о методе getRouteKeyName()! Это не помогает! Сосредоточьтесь на отношениях и сделайте это в первую очередь. Это причина того, что вы получаете нулевую ошибку. Попробуйте использовать dd($category->categoriesTranslations); или метод "die and dump".

parker_codes 13.03.2018 16:48

Я хочу ввести модель страницы в контроллер через маршрут. Модель страницы использует модель PageSlug, которая должна быть проверена по ее заголовку и столбцу языкового стандарта. (2 переменные в маршруте выглядят так: {lang} / pages / {slug}) Кто-нибудь знает, возможно ли это? @GoogleMac

user2879055 09.05.2019 23:08

Другие вопросы по теме