Как объединить две таблицы и получить идентификатор из первой таблицы в Laravel - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь объединить таблицы posts и tags и получить идентификатор таблицы posts, но этот код дает мне идентификатор (11) таблицы tags, а идентификатор записи - 15.

результат

$posts = Post::leftJoin('tags', 'tags.post_id', '=', 'posts.id')
                ->where('tags.slug', $slug)->get();

 dd($posts);

Теги таблицы

Schema::create('tags', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('post_id');
    $table->string('tag');
    $table->string('slug');
    $table->integer('views')->nullable();
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
});

Столбики

Schema::create('posts', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('category_id');
    $table->unsignedBigInteger('admin_id')->nullable();
    $table->string('title');
    $table->string('slug')->unique();
    $table->integer('views')->default(0);
    $table->longText('content');
    $table->text('meta_keywords')->nullable();
    $table->text('meta_description')->nullable();
    $table->enum('is_home', ['0', '1',])->default('1');
    $table->enum('is_featured', ['0', '1',])->default('0');
    $table->enum('is_slider', ['0', '1',])->default('0');
    $table->integer('slider_order')->default(0);
    $table->enum('type', ['Article', 'Video']);
    $table->enum('status', ['Visible', 'Invisible', 'Draft', 'Pending']);
    $table->foreign('category_id')->references('id')->on('categories');
    $table->foreign('admin_id')->references('id')->on('admins');
    $table->timestamps();
});

Тег модели

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tag extends Model
{
    protected $fillable = [
        'post_id', 'tag', 'slug',
    ];

    public $timestamps = false;
}

Модель сообщений

namespace App;

use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    public function tags()
    {
        return $this->hasMany(Tag::class);
    }
}

1 Ответ

1 голос
/ 08 октября 2019

Попробуйте

 $posts = Post::leftJoin('tags', 'tags.post_id', '=', 'posts.id')
           ->select('tags.id as tag_id','posts.*')
           ->where('tags.slug','=', $slug)
           ->get();

Теперь $posts->id будет id из posts таблицы. $posts->tag_id будет id из tags таблицы.

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