Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 6/7/8/9/10 » Вывод товаров категорий » 18.04.2022 07:22:12

Структура БД такая:

categories(id, parent_id, name, slug, ...)
products(id, category_id, name, slug, price, ...)

#2 Re: Laravel 6/7/8/9/10 » laravel - как передать переменную в родительский шаблон? » 17.04.2022 10:48:04

в AppServiceProvider пропиши в методе boot() переменную и верни в шаблон через фасад View:

public function boot()
    {
        $my_var = 'Hello, world';
        View::share([
            'my_var' => $my_var ,
        ]);
    }

#3 Laravel 6/7/8/9/10 » Вывод товаров категорий » 17.04.2022 10:41:05

lev89
Ответов: 2

Модель:

class Category extends Model
{
    use Sluggable;
    public function sluggable(): array
    {
        return [
            'slug' => [
                'source' => 'name'
            ]
        ];
    }
    public function parent()
    {
        return $this->belongsTo(Category::class, 'parent_id');
    }
    public function categories()
    {
        return $this->hasMany(Category::class, 'parent_id');
    }

    public function children()
    {
        return $this->hasMany(Category::class, 'parent_id')->with('categories');
    }


    public function products()
    {
        return $this->hasMany(Product::class);
    }
}

Контроллер

class CategoryController extends Controller
{
    public function show($slug)
    {
        $category = Category::where('slug', $slug)->first();
        $products = $category->products()->orderBy('created_at')->paginate(12);
        return view('category.product', [
            'products' => $products,
            'category' => $category
        ]);
    }
}

Данный код выводит все товары одной категории, по ключу slug. Но проблема в том, что категории могут быть вложенные и мне надо, чтобы выводились все товары, в том числе дочерних (если есть) категорий. Например, если выбрать родительскую категорию, то показать список всех товаров (в том числе товары дочерних категорий), а если выбрать только дочернюю категорию, то показать только те товары, которые находятся в данной дочерней категории. Как реализовать такой метод?

#4 Laravel 6/7/8/9/10 » Получить сумму за сегодня » 31.10.2021 20:15:48

lev89
Ответов: 1

я могу получить сумму всех заказов следующим способом:
$orders = Order::sum('sum');
Но как получить сумму заказов за сегодняшнюю дату?

#5 Re: Laravel 6/7/8/9/10 » Изменение пароля пользователя в админке » 13.10.2021 19:34:25

А как насчет защиты пользовательских данных?

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

#6 Laravel 6/7/8/9/10 » Изменение пароля пользователя в админке » 12.10.2021 22:05:13

lev89
Ответов: 2

как в админке изменить пароль пользователя в модальном окне? на текущий момент в моем приложении на странице редактирования можно изменить персональные данные пользователя кроме пароля. теперь я хочу реализовать изменение пароля пользователя, чтобы при клике на ссылку "изменить пароль" открывалось модальное окно и в форме ввода ввести новый пароль. нужно ли создавать отдельный метод в контроллере или можно это реализовать в одном методе update()?
Метод update

public function update(Request $request, $id)
    {
        $request->validate([
            'login' => 'required',
            'first_name' => 'required',
            'last_name' => 'required',
        ]);

        $user = User::find($id);
        $data = $request->all();

        $user->update($data);

        return redirect()->route('user.index')->with('success', 'Изменения сохранены');
    }

Вид edit

<div class="content">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-12">
                        <div class="card">
                            <div class="card-header">
                                <h3 class="card-title">Редактирование пользователя</h3>
                            </div>
                            <form role="form" method="post" action="{{ route('user.update', ['user' => $user->id]) }}" >
                                @csrf
                                @method('PUT')
                                <div class="card-body">
                                    <div class="form-group">
                                        <label for="login">Логин</label>
                                        <input type="text" name="login" class="form-control @error('login') is-invalid @enderror" value="{{ $user->login }}">
                                        <a href="#" data-toggle="modal" data-target="#modal-default">Изменить пароль</a>
                                    </div>

                                    <div class="form-group">
                                        <label for="email">E-mail</label>
                                        <input type="text" name="email" class="form-control @error('email') is-invalid @enderror" value="{{ $user->email }}">
                                    </div>

                                    <div class="form-group">
                                        <label for="first_name">Фамилия</label>
                                        <input type="text" name="first_name" class="form-control @error('first_name') is-invalid @enderror" value="{{ $user->first_name }}">
                                    </div>

                                    <div class="form-group">
                                        <label for="last_name">Имя</label>
                                        <input type="text" name="last_name" class="form-control @error('last_name') is-invalid @enderror" value="{{ $user->last_name }}">
                                    </div>

                                    <div class="form-group">
                                        <label for="middle_name">Отчество</label>
                                        <input type="text" name="middle_name" class="form-control @error('middle_name') is-invalid @enderror" value="{{ $user->middle_name }}">
                                    </div>
                                    <div class="form-group">
                                        <label for="role_id">Роль</label>
                                        <select name="role_id" class="form-control">
                                            <option value="">пользователь</option>
                                            @foreach($roleList as $role)
                                            <option value="{{ $role->id }}" @if($role->id == $user->role_id) selected @endif>{{ $role->name }}</option>
                                            @endforeach
                                        </select>
                                    </div>
                                </div>
                                <div class="card-footer">
                                    <button type="submit" class="btn btn-primary">Сохранить</button>
                                </div>
                            </form>
                        </div>
                    </div>
                </div>
            </div>
        </div>
        
        <div class="modal fade" id="modal-default">
            <div class="modal-dialog">
                <div class="modal-content">
                    <div class="modal-header">
                        <h4 class="modal-title">Изменение пароля</h4>
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body">
                        <div class="input-group mb-3">
                            <input type="password" name="password" class="form-control" placeholder="Введите новый пароль">
                        </div>
                        <div class="input-group mb-3">
                            <input type="password" name="password_confirmation" class="form-control" placeholder="Подтвердите новый пароль">
                        </div>
                    </div>
                    <div class="modal-footer justify-content-between">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                        <button type="button" class="btn btn-primary">Save changes</button>
                    </div>
                </div>
            </div>
        </div>

#7 Re: Laravel 6/7/8/9/10 » Вывод связанных данных » 23.09.2021 19:27:08

поизучал документацию, оказывается связанные данные можно вытащить конструктором запросов:

$postList = DB::table('posts')->select('posts.id', 'posts.title', 'posts.text', 'users.login as username', 'posts.created_at')
            ->join('users', 'posts.user_id', '=', 'users.id')->get();

#8 Laravel 6/7/8/9/10 » Вывод связанных данных » 23.09.2021 17:40:35

lev89
Ответов: 3

Хочу получить все записи из таблица posts, которая связана по внешнему ключу с таблицей users, но получаю ошибку "Неопределенное свойство $user
Модель User

class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

   // 

    public function about()
    {
        return $this->belongsTo(Posts::class);
    }
}

Модель Posts

class Posts extends Model
{
    use HasFactory;


    public function user()
    {
        return $this->hasMany(User::class);
    }
}

PostController

public function index()
    {
        $postList = DB::table('posts')->join('users', 'posts.user_id', '=', 'users.id')->get();
        return view('admin.post.index', compact('postList'));
    }

View

@foreach($postList as $item)
<tr>
     <td>{{ $item->id }}</td>
     <td>{{ $item->title }}</td>
     <td>{{ $item->text }}</td>
     <td>{{ $item->user->login }}</td>
     <td>{{ $item->created_at }}</td>
     </tr>
@endforeach

Подвал раздела