Присоединяйтесь к сообщениям и им нравится две таблицы, чтобы получить наиболее понравившиеся сообщения в laravel 6 - PullRequest
0 голосов
/ 15 октября 2019

Я новичок в Laravel, я хочу присоединиться к таблице posts и likes, чтобы получать наиболее понравившиеся сообщения.

Что-то вроде ...

У идентификатора записи 1 есть 3 отметки «Нравится».

У идентификатора записи 2 есть 2 отметки.

У идентификатора записи 3 есть 1 отметка.

данные таблицы сообщений

данные таблицы лайков

модель поста

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

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

модель лайка

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

class Like extends Model
{
    public $timestamps = false;
}

таблица сообщений

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();
});

таблица лайков

Schema::create('likes', function (Blueprint $table) {
    $table->bigIncrements('id');
    $table->unsignedBigInteger('post_id');
    $table->unsignedBigInteger('user_id')->nullable();
    $table->unsignedBigInteger('admin_id')->nullable();
    $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    $table->foreign('admin_id')->references('id')->on('admins')->onDelete('cascade');
});

1 Ответ

0 голосов
/ 15 октября 2019

Вы можете использовать withCount :

Post::withCount('likes')->orderBy('likes_count', 'desc')->get();

Тогда вы получите сообщение с наибольшим количеством лайков первым, если вы хотите использовать только топ-3:

->take(3) вместо ->get()

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