Laravel: я вижу свои данные, но не могу их получить. Это просто запрос, возвращающий строку - PullRequest
1 голос
/ 17 июня 2020

Я пытаюсь выучить Laravel снова, взглянув на него несколько лет, а теперь возвращаюсь и возвращаюсь к нему.

Проблема в том, что я слежу за проектом Laracasts Twitter, и все в порядке, но я попытался реализовать в Twitter вещи, не показанные в руководстве, а именно ретвиты и надлежащую функциональность Twitter, DM тоже работа. Все хорошо и работает, но я наткнулся на препятствие при получении некоторых данных.

В основном, для простоты, у меня есть таблица твитов, и она обрабатывает исходный твит и ретвит, и это работает нормально, правильно или неправильно построено. Однако когда я пытаюсь найти автора оригинального твита, он падает. Я вижу, что ищу в дампе, и там есть данные об авторе, в данном случае имя пользователя, но они не возвращаются из модели. Это между прочим работает без проблем.

У меня также есть модель User (с функцией tweets ()) и модель Tweets (с функцией User)

Я получаю эту ошибку, и данные появляются там, и я ее вижу , выглядит как строка 'Mikedeveloper', но я не могу понять ее, когда пытаюсь вернуться к этому представлению: https://flareapp.io/share/xPQxBgm1

Итак, у меня есть:

Моя таблица:

enter image description here

Шаблон:

<!-- 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;  

Наконец, работает, как показано ниже:

enter image description here

1 Ответ

1 голос
/ 17 июня 2020

Eloquent возвращает объекты, а не массивы. Поэтому вам нужно получить к ним доступ с помощью -> propertyName

public function getUserName()
{ 
    $user_id = $this->user_id;

    $username = User::find($user_id)->username;

    return $username; 
}

. Также обратите внимание на отношения и методы доступа. Во-первых, отношения, чтобы вы могли прикрепить пользователя к твиту.

class Tweet extends Model
{
   /**
   * Get the user record associated with the tweet.
    */
   public function user()
   {
        return $this->hasOne('App\User');
    }
}

Затем вы можете сделать следующее:

$tweet->user->username

Вы также можете создать метод доступа вместо функции getUserName () .

/**
* Get the user's full name.
*
* @return string
*/
public function getUsernameAttribute()
{

    return $this->user->username;
}

Тогда вы можете получить к нему доступ вот так.

$tweet->username
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...