gpt4 book ai didi

php - 通过 ID 和所有外国人在 Laravel 5 中递归获取记录

转载 作者:IT老高 更新时间:2023-10-29 00:01:21 25 4
gpt4 key购买 nike

我有两个表,看起来(迁移):

Schema::create('sets', function(Blueprint $table)
{
$table->increments('id');

$table->string('key');

$table->string('name');

$table->string('set_type');

$table->integer('belongs_to')->unsigned();

$table->timestamps();

$table->foreign('belongs_to')->references('id')->on('sets')->onDelete('cascade');

});

Schema::create('posts', function(Blueprint $table)
{
$table->bigIncrements('id');

$table->bigInteger('user_id')->unsigned();

$table->bigInteger('set_id')->unsigned();

$table->string('post_type', 25);

$table->text('post');

$table->boolean('is_reported')->default(false);

$table->boolean('is_hidden')->default(false);

$table->timestamps();

$table->foreign('user_id')->references('id')->on('users');
$table->foreign('set_id')->references('id')->on('sets');

});

“set”表用于存储应在其中查看帖子的位置(国家、城市...)的数据。例如,让我们存储一些国家:

   id | key               | name        | belongs_to
1 | europe | Europe | null
2 | germany-all | Germany | 1
3 | germany-berlin | Berlin | 2
4 | germany-frankfurt | Frankfurt | 2
5 | poland-all | Poland | 1
6 | poland-warsaw | Warsaw | 5
7 | england-all | England | 1

并且,我的帖子 set_id 为 6。从逻辑上看,当我想从欧洲(ID 1)获取帖子时,该帖子也应该返回,因为 6 属于 5,而 5 属于 1。这就是我想做的事。不使用太多 PHP 是可能的吗?

最佳答案

好的,我找到了最佳解决方案。这是嵌套集模式。我用了baum包,看起来:

对于 sets 表,我添加了 Baum 的列:

Schema::create('sets', function(Blueprint $table) {
$table->bigIncrements('id');
$table->integer('parent_id')->nullable()->index();
$table->integer('lft')->nullable()->index();
$table->integer('rgt')->nullable()->index();
$table->integer('depth')->nullable();

$table->string('key');
$table->string('name');
$table->string('set_type');

$table->timestamps();
});

完成了!只需获取 set_id 并返回帖子,例如:

$sets = Set::where('key', '=', $myKey)->first()->getDescendantsAndSelf()->lists('id');
$posts = Post::whereIn('set_id', $sets)->with(['user'])->take(6)->get();

我将把它留给后代;)

关于php - 通过 ID 和所有外国人在 Laravel 5 中递归获取记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31427227/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com