Как получить доступ к значениям свойств в коллекции laravel - PullRequest
0 голосов
/ 25 июня 2019

Я получаю данные из нескольких таблиц, используя красноречивые отношения.вот мой код:

 public function allPosts()
    {
        $posts = Post::with('commonContent','postComment','postLike')->get();
        //return $posts;
        foreach($posts as $post){
            echo $post->id;
            echo $post->content_id;

            foreach($post->common_content as $xyz){
              echo $xyz->description;
           }

        }
    }

когда я возвращаю $ сообщения, я получаю такой результат:

[
{
id: 2,
user_id: 8,
content_id: 3,
title: null,
created_at: "2019-06-25 10:00:41",
updated_at: "2019-06-25 10:00:41",
common_content: {
id: 3,
description: "this is a post",
media_json: "{"image":"uploads\/j658XUVMuP2dutAgNUTpYvqLABkJLwYXkgX1zTai.png","video":"uploads\/wIsZNWVDZYZYOgdGstNA5dIsexpQAUu4zJo0wp0c.mp4","audio":"uploads\/2AjXxj1NgeUnUlsCkSAgVqgrykb4XwL8sbjin3cC.mpga"}",
created_at: "2019-06-25 10:00:41",
updated_at: "2019-06-25 10:00:41",
media_json_setting: {
image: "uploads/j658XUVMuP2dutAgNUTpYvqLABkJLwYXkgX1zTai.png",
video: "uploads/wIsZNWVDZYZYOgdGstNA5dIsexpQAUu4zJo0wp0c.mp4",
audio: "uploads/2AjXxj1NgeUnUlsCkSAgVqgrykb4XwL8sbjin3cC.mpga"
}
},
post_comment: [ ],
post_like: [ ]
}
]

вот мои модели:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    protected $fillable = [
        'user_id', 'content_id'
    ];
    public function commonContent()
    {
        return $this->hasOne('App\Models\CommonContent', 'id','content_id');
    }

    public function postComment()
    {
        return $this->hasMany('App\Models\PostComment');
    }

    public function postLike()
    {
        return $this->hasMany('App\Models\PostLike');
    }

}

Я получаюошибка "Недопустимый аргумент для foreach ()" на этом foreach ($ post-> common_content как $ xyz).Как я могу получить доступ к свойствам.Любая помощь будет очень ценной.

Ответы [ 2 ]

0 голосов
/ 25 июня 2019

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

echo $post->commonContent->description;
0 голосов
/ 25 июня 2019

$post->common_content as $xyz не является массивом, поэтому вы не можете перебирать его через foreach.Чтобы получить доступ к свойству в $post->common_content, вы можете сделать это через $post->common_content->property_name

На вашем примере это было бы для "описания":

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