просмотр данных только для указанного зарегистрированного идентификатора в laravel-8

#php #laravel #laravel-8

Вопрос:

Здесь у меня есть две таблицы в моей базе данных с именем пользователь и продукты вот user.php

 public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->foreignId('current_team_id')->nullable();
            $table->text('profile_photo_path')->nullable();
            $table->timestamps();
        });
    }
 

используя эту таблицу, я могу зарегистрироваться и войти в систему по адресу электронной почты. после входа в систему он ведет меня на страницу под названием index.blade.php там, где у меня есть кнопка «Добавить данные», после нажатия на нее я попадаю в свой create.blade.php страница, на которой я могу зарегистрировать некоторые данные для таблицы продуктов. после регистрации данных эти данные показывают мне в index.blade.php. Это снова хорошо, я могу добавить данные, и они отображаются в индексе. здесь нет никаких проблем. Но проблема в том, что когда я войду в систему из индекса и снова зарегистрируюсь с новым адресом электронной почты, и войду с новым адресом электронной почты, мне будут показаны старые данные, которые я добавил с моим предыдущим электронным письмом. но я не хочу видеть старые данные после входа в систему с новым адресом электронной почты.
вот мой product.php таблица

     public function up()
    {
        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('detail');
            $table->string('color');
            $table->string('image');
            $table->string('logo');
            $table->timestamps();
        });
    }
 

вот мой ProductController.php

 <?php

namespace AppHttpControllers;

use AppModelsProduct;
use IlluminateHttpRequest;
use IlluminateSupportFacadesAuth;

class ProductController extends Controller
{
    public function index()
    {
        if(Auth::check()){
        $products = Product::latest()->paginate(1);

        return view('products.index',compact('products'))

            ->with('i', (request()->input('page', 1) - 1) * 5);
        }
    }
    public function create()
    {
        return view('products.create');
    }

    public function store(Request $request)
    {
        $request->validate([
            'name' => 'required',
            'detail' => 'required',
            'color' => 'required',
            'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:640dp*480dp',
            'logo' => 'required|mimes:jpeg,png,jpg,gif,svg|max:512*512',
        ]);

        $input = $request->all();

        if ($image = $request->file('image')) {
            $destinationPath = 'image/';
            $profileImage = date('YmdHis') . "." . $image->getClientOriginalExtension();
            $image->move($destinationPath, $profileImage);
            $input['image'] = "$profileImage";
        }

        if ($logo = $request->file('logo')) {
            $destinationPath = 'logo/';
            $profileLogo = date('YmdHis') . "." . $logo->getClientOriginalExtension();
            $logo->move($destinationPath, $profileLogo);
            $input['logo'] = "$profileLogo";
        }

        Product::create($input);

        return redirect()->route('products.index')
                        ->with('success','Product created successfully.');
    }
    public function show(Product $product)
    {
        return view('products.show',compact('product'));
    }
    public function edit(Product $product)
    {
        return view('products.edit',compact('product'));
    }
    public function update(Request $request, Product $product)
    {
        $request->validate([
            'name' => 'required',
            'detail' => 'required',
            'color' => 'required'
        ]);

        $input = $request->all();

        if ($image = $request->file('image')) {
            $destinationPath = 'image/';
            $profileImage = date('YmdHis') . "." . $image->getClientOriginalExtension();
            $image->move($destinationPath, $profileImage);
            $input['image'] = "$profileImage";
        }else{
            unset($input['image']);
        }

        if ($logo = $request->file('logo')) {
            $destinationPath = 'logo/';
            $profileLogo = date('YmdHis') . "." . $logo->getClientOriginalExtension();
            $logo->move($destinationPath, $profileLogo);
            $input['logo'] = "$profileLogo";
        }else{
            unset($input['logo']);
        }

        $product->update($input);

        return redirect()->route('products.index')
                        ->with('success','Product updated successfully');
    }
    public function destroy(Product $product)
    {
        $product->delete();

        return redirect()->route('products.index')
                        ->with('success','Product deleted successfully');
    }

    function indextwo(){
        //return DB::select("select * from  products");
       //DB::table('products')->orderBy('id','desc')->first();
       return Product::orderBy('id', 'DESC')->first();
    }

}
 

here is Product.php as model

 class Product extends Model
{
    use HasFactory;

    protected $fillable = [
        'name', 'detail', 'image','color','logo'
    ];
}
 

this is index.blade.php

 @extends('products.layout')

@section('content')
    <div class="row">
        <div class="pull-right">
            <!-- Authentication -->
               <form method="POST" action="{{ route('logout') }}" style="margin: 20px">
                   @csrf

                   <x-jet-dropdown-link href="{{ route('logout') }}"
                           onclick="event.preventDefault();
                                   this.closest('form').submit();">
                       {{ __('Log Out') }}
                   </x-jet-dropdown-link>
               </form>
           </div>
        {{--  --}}
        <div></div>
        <div class="col-lg-12 margin-tb">
            <div class="pull-left">
                <h2>Click Button</h2>
            </div>
            <div class="pull-right">
                <a class="btn btn-success" href="{{ route('products.create') }}"> For New Data</a>
            </div>
        </div>
    </div>

    @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
    @endif

    <table class="table table-bordered">
        <tr>
            <th>No</th>
            <th>App Name</th>
            <th>App Logo</th>
            <th>Splash Image</th>
            <th>Description</th>
            <th>Color</th>
            <th width="280px">Action</th>
        </tr>
        @foreach ($products as $product)
        <tr>
            <td>{{   $i }}</td>
            <td>{{ $product->name }}</td>
            <td><img src="/logo/{{ $product->logo }}" width="100px"></td>
            <td><img src="/image/{{ $product->image }}" width="100px"></td>

            <td>{{ $product->detail }}</td>
            <td>{{ $product->color }}</td>
            <td>
                <form action="{{ route('products.destroy',$product->id)}}" method="POST">

                    <a class="btn btn-info" href="{{ route('products.show',$product->id) }}">Show</a>

                    <a class="btn btn-primary" href="{{ route('products.edit',$product->id) }}">Edit</a>

                    <a class="btn btn-info" href="products_link">Get Json</a>

                    @csrf
                    @method('DELETE')

                    <button type="submit" class="btn btn-danger">Delete</button>
                </form>
            </td>
        </tr>
        @endforeach
    </table>

    {!! $products->links() !!}

@endsection
 

и это create.blade.php

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    {{-- <title>Document</title> --}}

    <title>Bootstrap Colorpicker Example - nicesnippets.com</title>
  <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet">
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.js"></script>
  <link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-colorpicker/2.5.1/css/bootstrap-colorpicker.min.css" rel="stylesheet">
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-colorpicker/2.5.1/js/bootstrap-colorpicker.min.js"></script>
</head>

<body>
@extends('products.layout')

@section('content')
<div class="row">
    <div class="col-lg-12 margin-tb">
        <div class="pull-left">
            <h2>Add New Data</h2>
        </div>
        <div class="pull-right">
            <a class="btn btn-primary" href="{{ route('products.index') }}"> Back</a>
        </div>
    </div>
</div>

@if ($errors->any())
    <div class="alert alert-danger">
        <strong>Whoops!</strong> There were some problems with your input.<br><br>
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<form action="{{ route('products.store') }}" method="POST" enctype="multipart/form-data">
    @csrf

     <div class="row">
        <div class="col-xs-4">
            <div class="form-group">
                <strong>Name:</strong>
                <input type="text" name="name" class="form-control" placeholder="Name">
            </div>
        </div>
        <div class="col-xs-4">
            <div class="form-group">
                <strong>Detail:</strong>
                <textarea class="form-control" style="height:150px" name="detail" placeholder="Detail"></textarea>
            </div>
        </div>
        <div class="container">
            <strong>Color picker</strong>
            <div id="cp2" class="input-group colorpicker colorpicker-component">
              <input type="text" value="#00AABB" class="form-control" name="color" placeholder="Color" />
              <span class="input-group-addon"><i></i></span>
            </div>
        </div>
        <div class="col-xs-4">
            <div class="form-group">
                <strong>Logo:</strong>
                <input type="file" name="logo" class="form-control" placeholder="logo">
            </div>
        </div>
        <div class="col-xs-4">
            <div class="form-group">
                <strong>Image:</strong>
                <input type="file" name="image" class="form-control" placeholder="image">
            </div>
        </div>
        <div class="col-xs-12 col-sm-12 col-md-12 text-center">
                <button type="submit" class="btn btn-primary">Submit</button>
        </div>
    </div>

</form>


<script type="text/javascript">
    $('.colorpicker').colorpicker({});
  </script>
@endsection
</body>
</html>
 

Комментарии:

1. являются ли продукты специфичными для пользователя? Если это так, вам нужно будет добавить соединение между продуктами и пользователями. Потому что в противном случае ваш контроллер всегда будет получать новейший продукт, не зависящий от пользователя

2. Как я могу добавить соединение между продуктами и пользователями хотя я новичок в laravel, я не знаю, как это сделать

3. @AbdullahAlShahed добавьте столбец user_id в таблицу продуктов и при сохранении данных о продукте используйте идентификатор пользователя из функции auth и вставьте его в таблицу продуктов

4. Это имеет меньше общего с laravel и больше с управлением БД, вам придется добавить внешний ключ в таблицу продуктов. laravel.com/docs/8.x/eloquent-relationships#one-to-many

Ответ №1:

Я сделал это с помощью « Аутентификация::идентификатор()