Как получить пользователей статьи и комментарии с Eloquent - PullRequest
0 голосов
/ 10 апреля 2019

Существуют три таблицы пользователей базы данных, статьи и объединяющая таблица article_users_comments, в которой содержится комментарий, идентификатор пользователя, прокомментировавший статью, и идентификатор прокомментированной статьи.

Я могу добиться следующего с чистым соединением SQL, но я хочу сделать это с Eloquent, я думал, что это будет довольно легко, но я сейчас немного растерялся.

Я пробовал разные вещи, но это все равно не работает.

// User

class User extends Authenticatable implements MustVerifyEmail,CanResetPassword{

    public function comments()
    {
        return $this->hasMany('App\ArticleComments');
    }

}

// Article

class Article extends Model{


    public function getArticles(){
        $articles = Article::paginate(3);
        return $articles;
    }

    public function getSingleArticle($title){

        $article = Article::where('title','=',$title)->get();
        return $article;
    }

    public function articleComments()
    {

        return $this->hasMany('App\ArticleComments');
    }

}

// ArticleComments

class ArticleComments extends Model{
      protected $table = 'article_users_comments';
    public $timestamps = false;

    public function article()
    {
        return $this->belongsTo('App\Article');
    }

    public function user()
    {
        $this->belongsTo('App\User');
    }

}

// ArticleController(showing only the show method), which passes the data to the certain view 
instantiating the Article Model 

class ArticleController extends Controller{

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($title)
    {
        $removeDashesFromUrl = str_replace('-',' ',$title);
         $am = new Article();
         $data = $am->getSingleArticle($removeDashesFromUrl);
         return view('article',['article'=>$data]);
    }


}

Я хочу получить комментарии и пользователей (которые прокомментировали статью) для определенной статьи.

1 Ответ

0 голосов
/ 10 апреля 2019

Вы должны установить внешний ключ в отношениях articleComments и article:

Eloquent определяет имя внешнего ключа по умолчанию, проверяя имя метода отношения и добавляя суффикс имени метода к _id. Тем не менее, вы можете передать имя пользовательского ключа в качестве второго аргумента в методе assignTo:

Артикул Модель

 public function articleComments()
 {
     return $this->hasMany('App\ArticleComments','commented_article_id');
 }

ArticleComments Model

public function article()
{
    return $this->belongsTo('App\Article','commented_article_id');
}

Вы можете получить комментарии к статье, используя отношение:

$article = Article::find($id);
$article->articleComments; // This will return all comments for the given article

Вы можете использовать цикл foreach и получать доступ к каждому атрибуту из каждого комментария:

foreach($article->articleComments as $comment)
{
  echo $comment->id;
  echo $comment->user->id;
  echo $comment->user->username;
    .
    .
    .
}

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

Для получения дополнительной информации: нажмите здесь.

Примечание: я настоятельно рекомендую изменить название вашей модели на Комментарий , мы не используем названия моделей во множественном числе, всегда в единственном числе.

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