Laravel 5.7 Eloquent - PullRequest
       6

Laravel 5.7 Eloquent

0 голосов
/ 13 декабря 2018

Итак, у меня возникли проблемы с получением информации из моей базы данных в Laravel.Дело в том, что я хочу иметь таблицу настроек сайта с некоторыми глобальными значениями по умолчанию.

+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(11)      | NO   | PRI | NULL    | auto_increment |
| option_name  | varchar(255) | NO   |     | NULL    |                |
| option_value | longtext     | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+

Вот так .. Как мне получить всю информацию с помощью Laravels Eloquent?

select * from `options`;
> 1 | site_name | mysite.com

Я хочу иметь возможность делать

$options->site_name

в моих контроллерах и представлениях.Не могу вспомнить, как называется такая вещь, поэтому я не могу ее найти ..: (

РЕДАКТИРОВАТЬ:

Класс модели после запроса

namespace App;

use Illuminate\Database\Eloquent\Model;

class DNBOptions extends Model
{
    protected $table = 'dnb_options';
    protected $primaryKey = 'option_name';

    protected $fillable = [
        'option_name', 'option_value'
    ];
}

РЕДАКТИРОВАТЬ 2:

Получил ответ на Laracast для использования -> pluck () и приведен к (объекту), чтобы получить результат, который я искал.

$ option-> site_name

Ссылка на Laracast

Ответы [ 5 ]

0 голосов
/ 13 декабря 2018

В вашем приложении / Http / Controllers / Controller.php

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected $options;

    public function __construct()
    {
        $this->options = (object)DNBOptions::pluck('option_value', 'option_name')->toArray();
        \View::share('options', $this->options);
    }
}

В просмотрах:

{{ $options->site_name }}

В контроллерах:

$this->options->site_name
0 голосов
/ 13 декабря 2018

В контроллере сначала добавьте пространство имен модели:

use App\Option;

 ....
 ....

public function methodName($id) {
    $data['options'] = Option::all();
    return view('index',$data);
}

представление, расположенное в каталоге resources/views/ с именем index.blade.php

или в блейде:

@foreach($options as $option)
     {{ $option->site_name }}
     {{ $option->option_value }}
@endforeach
0 голосов
/ 13 декабря 2018
0 голосов
/ 13 декабря 2018

Сначала создайте модель.Вы можете сделать это вручную или с помощью artisan в терминале:

php artisan make:model Option

Это создаст App\Option класс.Затем настройте модель в app/Option.php:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Option extends Model
{
    //
    protected $table = 'options';
}

Теперь в любом контроллере, например App\Http\Controllers\AnyController, вы можете использовать код:

use App\Option;

// Other codes ...

public function show($id) {
    $option = Option::find($id);
    echo $option->option_name; // print "site_name"
}

РЕДАКТИРОВАТЬ ПОСЛЕ ОПЦИИ ДАТЬ НОВУЮ МОДЕЛЬ -------------

Так что, если вы используете модель:

namespace App;

use Illuminate\Database\Eloquent\Model;

class DNBOptions extends Model
{
    protected $table = 'dnb_options';
    protected $primaryKey = 'option_name';

    protected $fillable = [
        'option_name', 'option_value'
    ];
}

, то в контроллере или представлении используйте:

$option = \App\DNBOptions::find('site_name');
echo $option->option_value;

// Get all
$options = \App\DNBOptions::all();
foreach($options as $option) {
    echo $option->option_name;
    echo $option->option_value;
}

// Print 1st
echo $options->first()->option_name;

// With where
$option = \App\DNBOptions::where('option_name', 'site_name')->first();
echo $option->option_value;

Полный контроллер - пример просмотра:

<?php

namespace App\Http\Controllers;

use App\DNBOptions;

class OptionController extends Controller
{
    /**
     * Show the application dashboard.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        $options = DNBOptions::all();
        $data ['options'] => $options;
        return view('options.index', $data);
    }
}

И класс просмотра: resources/views/options/index.blade.php:

@extends('layouts.app')

@foreach($options as $option)
     {{ $option->site_name }}
     {{ $option->option_value }}
@endforeach

Используйте @extends, если у вас есть шаблон макета.И смотрите документацию Laravel для получения дополнительной информации.

0 голосов
/ 13 декабря 2018

Eloquent Query:

$options = DB::table('options')->get();

получить всю информацию, используя этот код:

@foreach($options as $option)
     {{ $option->site_name }}
     {{ $option->option_value }}
@endforeach
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...