ChupiPichu
@ChupiPichu (Chupi)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

【Laravel 8】group_idとgroupnameの二つのカラムに一致したユーザーを抽出したい

解決したいこと

前提として会員制掲示板は機能しており、全員の一覧はできております。
グループIDは自由に決められますので、例えばグループID1のグループAのユーザーAとユーザーBはグループID1のグループAのユーザーAとユーザーBの投稿しか見れません。グループID1のグループBのユーザーCとユーザーDはグループID1のグループBのユーザーCとユーザーDの投稿しか見れません。グループID2のグループCのユーザーEとユーザーFはグループID2のグループCのユーザーEとユーザーFの投稿しか見れません。というようにしたいです。
グループID(group_id)とグループ名(groupname)二つのカラムに一致したユーザーのみを抽出するにはどこを修正すればよいかご教授いただますでしょうか。
お手数をおかけしますが、よろしくお願いいたします。

発生している問題・エラー

二つのカラムに一致したユーザーを抽出できていない

問題コード
➀
$user=auth()->user();
$groupuser=auth()->user()->group_id;
$grouppostuser=auth()->user()->groupname;
⓶
$users=User::query()->get();
foreach($users as $user){
$id = $user->id;
}

ER図

うまく作れていませんが、ご参考にして頂けたら幸いです。
QuickDBD-export (1).png

該当するソースコード

Controller.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\User;
use App\Models\Post;
use App\Models\Comment;
use Auth;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\DB;

class HomeController extends Controller
{
public function __construct()
{
$this->middleware('auth');
}
public function index()
    {
        $user=auth()->user();
        $groupuser=auth()->user()->group_id;
        $grouppostuser=auth()->user()->groupname;
        $posts=Post::where('group_id', $groupuser)->where('groupname', $grouppostuser)->orderBy('created_at', 'desc')->paginate(10);
        return view('grouppost', compact('posts', 'user'));
    }
public function foods()
{
$users=User::query()->get();
        foreach($users as $user){
            $id = $user->id;
$PostsOisiCount[$id]=Post::where('user_id', $id)->count();
}
return view('foods', compact('users', 'PostsOisiCount'));
}
}
grouppostBlade.php
@foreach ($posts as $post)
<div class="card-body">
<p>{{($post->body)}}</p>
</div>
@endforeach
foodsBlade.php
@foreach($users as $user)
<div class="card-body">
<p>
<?php 
$id=$user->id;
echo PostsOisiCount[$id]
?> 
/p>
</div>
@endforeach

自分で試したこと

Controller.phpにおいて下記の部分をたくさん書き換えては試したのですが、うまくいっておりません。

➀
$user=auth()->user();
$groupuser=auth()->user()->group_id;
$grouppostuser=auth()->user()->groupname;
⓶
$users=User::query()->get();
foreach($users as $user){
$id = $user->id;
}
0

1Answer

データの関係性などが分かりにくいので、テーブルの構造やER図などを示されたほうが良いと思います。

グループID1のグループA
グループID1のグループB

通常IDは一意にするのですが、同じIDが複数あるのでしょうか?

ユーザーAとユーザーBは所属ID1

「所属」とはなんでしょうか?

$posts = Post::where('group_id', $grouppostuser)
    ->where('groupname', $grouppostuser)
    ->orderBy('created_at', 'desc')
    ->get();

この方法だと何が問題なのでしょうか?

0Like

Comments

  1. @ChupiPichu

    Questioner

    コメントありがとうございます。誤字でした。グループIDの意味です。
    上記の方法ではグループIDとグループ名を同時に絞れていませんでした。
    出力は全員となってしまい、同じグループIDとグループ名のユーザーを出力できません。
    おそらく、下記二行の定義ができていないからかと思いますが、いかがでしょうか。
    $groupuser=auth()->user()->group_id;
    $grouppostuser=auth()->user()->groupname;
    テーブルの構造やER図、追加してみます。
  2. @ChupiPichu

    Questioner

    ER図追加いたしました。ご確認いただけたらと思います。
  3. > $groupuser=auth()->user()->group_id;
    > $grouppostuser=auth()->user()->groupname;

    これらの値は正しいですか?

    postsテーブルのgroup_id、groupnameにデータは入っていますか?

    片方だけなら絞り込みできますか?
  4. @ChupiPichu

    Questioner

    コメントありがとうございます。
    group_id、groupnameのデータは入っています。片方は絞り込めます。
    ただ、group_idは自由に決めれるため、例えば、group_idが1のグループAとgroup_idが1のグループBは同時に見れてしまいます。
    また、下記のほうは絞り込み方がわかりません。
    $users=User::query()->get();
    foreach($users as $user){
    $id = $user->id;
  5. 今のところ原因となるものは分かりませんね・・・。

    $postsに2回代入しているのは何故ですか?

    group_idの箇所は$groupuserではないですか?

    変数ではなく直接値を指定して絞り込みはできませんか?

    絞り込めている、絞り込めていないはどのように確認しているのですか?

    実行しているSQLは確認できますか?https://qiita.com/torut/items/c21ec0ed9a2e9a426920#eloquent-orm%E3%81%AE%E5%A0%B4%E5%90%88%E3%82%82%E5%90%8C%E3%81%98

    $usersの部分は何をしようとしているのですか?(投稿に関する質問しかないですが・・・)
  6. @ChupiPichu

    Questioner

    コメントありがとうございます。
    ミスでしたので、$posts=Post::where('group_id', $groupuser)->where('groupname', $grouppostuser)->orderBy('created_at', 'desc')->paginate(10);に修正しました。ご指摘ありがとうございます。
    直接値の絞り方はどういうやり方でしょうか。
    絞り込めていないというのは同じID1のグループAとID1のグループBの投稿を両方見れてしまっています。
    SQLは下記のようになっております。
    string(62) "select * from `users` where `group_id` = ? and `groupname` = ?"
  7. @ChupiPichu

    Questioner

    $usersのほうは全IDのユーザーのデータを取得して一覧にしております。

Your answer might help someone💌