принадлежит отношениям в laravel 5.8 - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу установить связь между постом и пользователем, чтобы таким образом можно было получать все посты $ user-> posts () и таким образом получать пользователя $ post-> user ()

Я сделал функцию ownTo, но мне нужен способ, чтобы, когда я получал пользователя, я мог как-то найти все его сообщения, также когда я получал сообщение, которое я использовал \ App \ Post :: find (1) -> user () -> name, returnНичего

Пост-модель

class Post extends Model
{
    public function user() {
        return $this->belongsTo('App\User',null,'userid');
    }
}

Пост-структура БД

Schema::create('posts', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('title');
            $table->longText('body');
            $table->string('thumbnail');
            $table->integer('views');
            $table->integer('likes');
            $table->bigInteger('userid');
            $table->integer('categoryid');
            $table->timestamps();
        });

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

Структура БД пользователя - Laravel По умолчанию

Код Foreach:

@foreach(\App\Post::find(4)->user() as $user)
            <p>{{$user->name}}</p>
@endforeach

Я ожидал, что получит имя пользователя, но оно не получилось ..

Ответы [ 2 ]

1 голос
/ 20 сентября 2019

Используйте отношение hasMany.

Внутри модели пользователя:

public function posts()
{
    return $this->hasMany(Post::class, 'userid', 'id');
}

Теперь вы можете получить все сообщения пользователя:

$posts = User::find($someId)->posts()->get();
//or
$posts = User::find($someId)->posts;

Документыо имеет много отношений

Надеюсь, это поможет.

0 голосов
/ 20 сентября 2019

В пользовательской модели

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\User;

class Post extends Model
{
    /**
     * Get the comments for the blog post.
     */
    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

В пользовательской модели

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use App\Post;

class User extends Model
{
    /**
     * Get the posts for the user.
     */
    public function comments()
    {
        return $this->hasMany('App\Post');
    }
}

Теперь вы можете получить доступ к сообщениям пользователя как App\User::find(id)->posts

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