2017-01-27 6 views
1

とレベルの親を先頭に属している場合MYSQLチェックは私はこのようなテーブルがある:Laravelは:子供が1つのクエリ

id | user | parent_id | level | 
--------------------------------------------- 
1 | parent1 |  0  |  1 
2 | parent2 |  0  |  1 
3 | parent3 |  1  |  2 
4 | child1 |  1  |  2 
5 | child2 |  4  |  3 

child2のから、私はそれが親1に属しているかどうかを確認したいと思います。それは親1なるまで

明白な答えは、child2の>チェック親>チェック親>から始まる各レベルからのクエリを実行することになります。しかし、それは実行するための多くのクエリになります。 Like:

while ($parent = \DB::table('users')->where('parent_id', $child->parent_id)->first()) { 
    if ($checkparent->id == $parent->id) break; // found the checked parent 
    else $child = $parent; 
} 

1つのクエリでこれを実行する方法はありますか? (注:これは、2つの以上のレベルになります)

parent1 <-- to here   parent2 
/ \ 
parent3 child1 
      \ 
      child2 <-- from here 
+0

http://dba.stackexchange.com/questions/46393/get-top-most-parent-by-nth-child-id mysqlでは実行できません。 Tbh、それは微視的な最適化です。すでにlaravelを使用しているため、データベースへのリクエストはそれほど重要ではありません。 'id'がプライマリキーであると仮定すると、クエリは速くなければなりません。 –

+0

@AlexBlex:500レベルはどうですか? – user2002495

+0

次に、データモデルまたはストレージエンジンを再考します。 MySQLは目的に合っていません。 –

答えて

-1

を私はあなたがこのために探していると思う:

Nested has statements may also be constructed using "dot" notation. For example, you may retrieve all posts that have at least one comment and vote: 

// Retrieve all posts that have at least one comment with votes... 
$posts = Post::has('comments.votes')->get(); 

詳細情報についてはこちらをご確認ください - あなたがいることを確認する必要がありhttps://laravel.com/docs/5.3/eloquent-relationships

をその関係はモデル内で適切に設定されます。

+0

これは私が探しているものではありません。各ユーザーは同じモデルです。 – user2002495

関連する問題