如何从3个表中获取一对多关系的数据

uwopmtnx  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(332)

我有一个名为scores的表,里面有一个名为subject\u id的外键,这个外键和表名为subjects的表有一对多的关系,里面有一个名为user\u id的外键,这个外键和表名为users的表有一对多的关系,现在我可以从分数表中显示主题列表了,现在如何得到用户名,谁的主题id等于用户id。
控制器:

$scores = Score::with('lead','subject')->where('lead_id','=',$id)->get();

$subjects=Subject::with('user')->get();

看法

<tr> 
  @foreach($scores as $score)
     <th><font size="1">&nbsp;</font></th> 
  @endforeach 
</tr>

<tr>
  @foreach($scores as $score)
 <td>
   <font size="1">{{$score->subject->subject_name}}</font>
  @endforeach 
 </td>
</tr>
9ceoxa92

9ceoxa921#

你需要使用 belongTo 得分模型中的关系。

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

现在你可以得到这样的用户名。

$scores = Score::with('lead','subject')->with('user')->where('lead_id','=',$id)->get();
u91tlkcl

u91tlkcl2#

从聊天讨论中发现你 belongsTo 关系 Subject 以及 User 模型。您正在使用 subject_id 在你的分数表和 Score 模型具有 belongsTo 关系 Subject 模型。所以,是的,你可以像这样获取用户的详细信息

{{$score->subject->user->name}}
9gm1akwq

9gm1akwq3#

索引.php

$posts = Posts::read_all();

      foreach ( $posts as $post )
 {
         echo $post->post_name ."<br>";
          echo $post->post_text ."<br>";

$categories_array = Posts::get_cats_by_post_id($post->id);

foreach ($categories_array as $category)
{
    echo "&bull;". $category->category_name ."<br>";
}

}

课后

公共静态函数get_cats_by_post_id($id){$db=new database();

$sql = "SELECT  cats_to_posts.cats_id
        FROM    cats_to_posts
        WHERE   cats_to_posts.post_id = {$id}";

$result = $db->exe_query($sql);

$cat_id_array = array(); // stores array of category ids that match post ids

while ( $record = $result->fetch_object() )
{
    $cat_id_array[] = $record;
}

$cat_name_array = array(); // stores array of category names that match category ids
foreach($cat_id_array as $cat_id)
{
    $new_sql = "SELECT  category_name
                FROM    categories
                WHERE   id = ". $cat_id->cats_id;

    $new_result = $db->exe_query($new_sql);

    while ( $new_record = $new_result->fetch_object() )
    {
        $cat_name_array[] = $new_record;
    }

}

return $cat_name_array;

}
试试这个希望,这样就行了。

相关问题