Laravel, relacje

0

Witam, mam problem z relacjami w Laravel.
Zrobiłem relację many to many tabela users i articles

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('last_name');
            $table->string('nick');
            $table->string('email')->unique();
            $table->string('password');
            $table->string('key_activate');
            $table->integer('activate')->default(0);
            $table->rememberToken();
            $table->timestamps();
        });
    }

//tabela artykułów
public function up()
    {
        Schema::create('articles', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('id_user');
            $table->string('title');
            $table->string('category_id');
            $table->string('description');
            $table->text('body');
            $table->string('author');
            $table->string('localization');
            $table->string('tags');
            $table->timestamps();
        });
    }
// i pivot

 public function up()
    {
        Schema::create('user_article', function (Blueprint $table){
            $table->increments('id');
            $table->integer('user_id')->unsigned();
            $table->integer('article_id')->unsigned();
            $table->timestamps();

            $table->foreign('user_id')
                ->references('id')
                ->on('users');
            $table->foreign('article_id')
                ->references('id')
                ->on('articles');
        });
    }

i teraz kilka pytań

  1. Czy jeśli dodaję rekord do tabeli articles (artykuł) w tabeli pośredniczącej powinien być dodawany jakiś rekord, tzn id artykułu i użytkownika? U mnie jest tak że artykuł jest dodawany bez problemu ale do pivotu nic nie jest dodawane.
  2. Co mi daje taka relacje (bo tego do końca nie rozumiem), moim założeniem było to że dzięki niej dane użytkownika który dodaje artykuł (takie jak imię, nazwisko, nick) będą automatycznie pobierane z tabeli users a nie będę musiał ich jeszcze raz dodawać w tabeli articles
    jeszcze według dokumentacji dodałem funkcję w modelu User
    public function article(){
        return $this->belongsToMany(Article::class);
    }
0

To jest php tu ci się z automatu nic nie doda, większość danych musisz ręcznie wypełnić

0

Czyli dane do tabeli pośredniczącej muszę dodać ręcznie?

3

Czy jeśli dodaję rekord do tabeli articles (artykuł) w tabeli pośredniczącej powinien być dodawany jakiś rekord, tzn id artykułu i użytkownika?

Sam z siebie rekord się nie pojawi. Musisz samemu okodować w pewien sposób aby się dodał.
Możesz manualnie po stworzeniu Article dodać rekord do pivot'a, możesz też stworzyć observer, w którym wyłapiesz event "created" i utworzysz rekord do pivota (można też na kilka innych sposobów, ale to już każdy zrobi jak woli).

Co mi daje taka relacje (bo tego do końca nie rozumiem), moim założeniem było to że dzięki niej dane użytkownika który dodaje artykuł (takie jak imię, nazwisko, nick) będą automatycznie pobierane z tabeli users a nie będę musiał ich jeszcze raz dodawać w tabeli articles

Związek many to many w tym przypadku by znaczył, że jeden artykuł może mieć wiele autorów, jak i jeden autor może mieć wiele artykułów.
W przypadku który opisałeś, powinieneś utworzyć związek One to Many (Jeden autor, wiele artykułów), a nie Many to Many.
Tak więc zamiast 3 tabel, powinieneś mieć tylko 2.
[users]
id | ...
[articles]
id | user_id | ...

jeszcze według dokumentacji dodałem funkcję w modelu User

Tak jak wyżej, opisujesz że chcesz stworzyć związek One to Many, a tworzysz Many to many.
Dodatkowo tak jak tworzysz metodę article() w klasie User, tak powinieneś też stworzyć zwrotną metodę user() w klasie Article.

Article
public function user()
{
    return $this->belongsTo(User::class);
}

User
public function article()
{
    return $this->hasMany(Article::class)
}
1

Zapoznaj się z tym punktem, tutaj masz wszystko opisane https://laravel.com/docs/5.6/[...]ng-many-to-many-relationships

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0