Я пытаюсь выучить Laravel снова, взглянув на него несколько лет, а теперь возвращаюсь и возвращаюсь к нему.
Проблема в том, что я слежу за проектом Laracasts Twitter, и все в порядке, но я попытался реализовать в Twitter вещи, не показанные в руководстве, а именно ретвиты и надлежащую функциональность Twitter, DM тоже работа. Все хорошо и работает, но я наткнулся на препятствие при получении некоторых данных.
В основном, для простоты, у меня есть таблица твитов, и она обрабатывает исходный твит и ретвит, и это работает нормально, правильно или неправильно построено. Однако когда я пытаюсь найти автора оригинального твита, он падает. Я вижу, что ищу в дампе, и там есть данные об авторе, в данном случае имя пользователя, но они не возвращаются из модели. Это между прочим работает без проблем.
У меня также есть модель User (с функцией tweets ()) и модель Tweets (с функцией User)
Я получаю эту ошибку, и данные появляются там, и я ее вижу , выглядит как строка 'Mikedeveloper', но я не могу понять ее, когда пытаюсь вернуться к этому представлению: https://flareapp.io/share/xPQxBgm1
Итак, у меня есть:
Моя таблица:
Шаблон:
<!-- This isn't a retweet -->
@if(!$tweet['rt'] && !$tweet['tweet_id'])
<h5 class="font-bold mb-4">
<a href="{{$tweet->user->profile()}}">{{$tweet->user->name}}</a>
</h5>
<!-- This is a retweet -->
@else
<h5 class="font-bold mb-4 bg-green-300 p-2 text-white rounded">
<a href="{{$tweet->user->profile()}}">
{{$tweet->user->username}} retweeted:
</a>
<a href="{{route('profile',$tweet->getUserName($tweet))}}">
{{$tweet->getUserName($tweet)}}
</a>
<i class="fa fa-retweet" style="font-size:24px"></i>
</h5>
@endif
Модель:
public function getUserName(Tweet $tweet)
{
// Query table on the tweet_id and get the original tweet id and then query
// that row and get the 'user_id'
$user_id = $this::where('tweet_id',$tweet->tweet_id)->get()
->pluck('user_id')[0];
// Use the 'user_id' and get the username of the original tweet.
$username = User::find($user_id)['username'];
ddd($username);
return $username;
}
Обновление:
Используя отношения - теперь у меня эта и снова идентичная проблема, вываливается в модели нормально и работает в tinker! Если я сделаю дамп в модели, он показывает имя пользователя в виде строки, но когда я пытаюсь его отобразить, появляется ошибка:
$this->find($this->tweet_id)
->user
->username;
Наконец, работает, как показано ниже: