Функция Laravel, содержащая два параметра

Мой Контроллер

public function showSpecificSite($site_id){

$reports = Report::whereHas('site', function($query) use($site_id) {
    $query->where('site_id', $site_id);
})->get(['email_date', 'url', 'recipient']);

$siteName = Site::find($site_id)->site_name;

  return view('newsite', compact('site_id', 'siteName', 'reports'));
}

public function showMonthlyReport($site_id, $report_id)
{

$site = Report::whereHas('site', function($query) use($site_id) {
    $query->where('site_id', $site_id);
})->get();

$report = $site->Report::find($report_id);

return view('reports')->with('report', $report)->with('site_id',$site_id)
->with('report_id', $report_id);
}

Мой маршрут

Route::get('sites/{site_id}',['as'=>'SpecificSite','uses'=>'ReportController@showSpecificSite']);

Route::get('sites/{site_id}/report/{report_id}', ['as'=>'Reports', 'uses' => 'ReportController@showMonthlyReport']); 

Мой взгляд на лезвие

<a href = "{{route('SpecificSite',['site_id'=>$record->site_id])}}">view</a>  

<a href = "{{route('Reports',['site_id'=>$report->site_id, 'report_id'=>$report->report_id])}}">view</a>

Модель сайта

public function report()
{
    return $this->hasMany('App\Report');
}

Модель отчета

public function site()
{
    return $this->belongsTo('App\Site');
}

Мой print_r ($ report)

App\Report Object
(
[fillable:protected] => Array
    (
        [0] => site_url
        [1] => reciepients
        [2] => monthly_email_date
    )

[connection:protected] => 
[table:protected] => 
[primaryKey:protected] => id
[keyType:protected] => int
[perPage:protected] => 15
[incrementing] => 1
[timestamps] => 1
[attributes:protected] => Array
    (
        [email_date] => 2018-08-23
        [url] => http://foyston.com
        [recipient] => [email protected]
    )

[original:protected] => Array
    (
        [email_date] => 2018-08-23
        [url] => http://foyston.com
        [recipient] => [email protected]
    )

[relations:protected] => Array
    (
    )

[hidden:protected] => Array
    (
    )

[visible:protected] => Array
    (
    )

[appends:protected] => Array
    (
    )

[guarded:protected] => Array
    (
        [0] => *
    )

[dates:protected] => Array
    (
    )

[dateFormat:protected] => 
[casts:protected] => Array
    (
    )

[touches:protected] => Array
    (
    )

[observables:protected] => Array
    (
    )

[with:protected] => Array
    (
    )

[morphClass:protected] => 
[exists] => 1
[wasRecentlyCreated] => )1

Моя функция showSpecificSite работала так хорошо. Мой локальный хост выглядит так: http://localhost:8000/sites/1/==http://localhost:8000/sites/$site_id/

Теперь моя проблема - мой showMonthlyReport.
http://localhost:8000/sites/report==http://localhost:8000/sites/null/report/null Это путь, который я всегда выбираю.

Должен быть http://localhost:8000/sites/1/report/1

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

Заранее спасибо! ~

Мне кажется, у тебя uses не тот, можешь это проверить?

Phiter 22.08.2018 21:38

Это как этот ['as'=>'Reports', 'uses => ReportController@showMonthlyReport']. uses => xx - целая строка вместо пары ключей

Phiter 22.08.2018 21:38

@Phiter уже исправлен, но все еще та же ошибка. Мои site_id и report_id все еще были пустыми.

Christian Gallarmin 22.08.2018 21:43

что произойдет, если вы укажете маршрут php artisan: list? под тем, что происходит, я имею в виду ... как этот маршрут напечатан в этой команде?

Erubiel 22.08.2018 21:43

Можете ли вы попробовать переместить маршрут Reports выше маршрута SpecificSite?

Phiter 22.08.2018 21:46
GET|HEAD | sites/{site_id} | SpecificSite | App\Http\Controllers\ReportController@showSpecificSiteGET|HEAD | sites/{site_id}/report/{report_id} | Reports | App\Http\Controllers\ReportController@showMonthlyReport
Christian Gallarmin 22.08.2018 21:48

@Phiter NotFoundHttpException та же проблема, она дает мне этот путь http://localhost:8000/sites//report

Christian Gallarmin 22.08.2018 21:50

извините за вопрос, но есть ли у отчета report_id? действительно ли это: $ report-> report_id? Разве это не должно быть $ report-> id? Кроме того, что происходит, когда вы dd ($ report) на контроллере или когда вы print_r ($ report) в представлении

Erubiel 22.08.2018 21:50

@Erubiel в моей базе данных это был report_id, так ли плохо было поставить этот `$ report-> report_id`?

Christian Gallarmin 22.08.2018 21:54

Извините, это "стандарт" laravel для использования col 'id' для первичного ключа таблицы ... Не "tablename_id" ... поскольку это стандарт, который, как я думал, может вызвать проблему, но если это то, что вы определились в БД, должны работать.

Erubiel 22.08.2018 22:00

@Erubiel, где мне dd ($ report), это функция ежемесячного отчета?

Christian Gallarmin 22.08.2018 22:01

Я нигде не вижу этих переменных report_id, site_id. Кроме того, не по теме, но избегайте использования действительных адресов электронной почты в коде, который вы публикуете здесь, или во время тестирования. используйте что-то вроде адреса [email protected].

Erubiel 22.08.2018 22:46

Я попытался включить это в свои отчеты, но там написано NotFoundHttpException, потому что мой путь всегда такой, как этот http://localhost:8000/sites//report

Christian Gallarmin 22.08.2018 22:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
13
149
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4


Вы не можете использовать привязку и ссылку для маршрута, который имеет два параметра, которые вы можете
1-составьте маршрут и отправьте данные по этому маршруту с помощью формы.
2-редирект на ваш маршрут с полученными данными.
код:

public function redirectroute(Request $request){
        return Redirect::to('sites/'.$request->site_id.'/report'.$request->report_id)->with(compact('request'));
    }


а затем делайте свою работу.

@Christian, мой ответ тебе поможет?

Abolfazl Mohajeri 22.08.2018 21:57

Дай мне попробовать. Надеюсь, это поможет. @AbolfazlMohajeri

Christian Gallarmin 22.08.2018 22:11

@Christian, да, попробуй это

Abolfazl Mohajeri 22.08.2018 22:24

все мои идентификаторы все еще равны нулю, братан, но спасибо за попытку мне помочь.

Christian Gallarmin 22.08.2018 22:32

В вашем контроллере измените способ передачи данных в представление

view('reports', ['report' => $report, 'site_id' => $site_id, 'report_id' => $report_id]);

Поскольку $report не имеет site_id или report_id, но вы рассчитываете их и передаете их в свой контроллер как $site_id и $report_id, вам следует изменить это

<a href = "{{route('Reports',['site_id'=>$report->site_id, 'report_id'=>$report->report_id])}}">view</a>

к этому

<a href = "{{route('Reports',['site_id'=>$site_id, 'report_id'=>$report_id])}}">view</a>

Это дает мне ошибку при просмотре лезвия. Неопределенная переменная: report_id

Christian Gallarmin 22.08.2018 22:54

Неопределенная переменная: отчет, но я объявляю это в своей функции.

Christian Gallarmin 22.08.2018 23:04

Вот как вы должны генерировать свои маршруты:

<a href = "{{ route('SpecificSite', [$record->site]) }}">view</a>
<a href = "{{ route('Reports', [$report->site, $report]) }}">view</a>

Как вы это делаете, каждый ключ массива станет параметром в строке запроса.

Дело в том, что мой SpecificSite уже был объявлен в моем домашнем представлении, поэтому мне уже нужно получить эти данные, но мне так сложно понять, как это сделать.

Christian Gallarmin 23.08.2018 16:16
Ответ принят как подходящий

Этим я свою проблему решаю.

public function showSpecificSite($site_id){

$reports = Report::whereHas('site', function($query) use($site_id) {
    $query->where('site_id', $site_id);
})->get(['email_date', 'url', 'recipient', 'report_id', 'site_id']);

$siteName = Site::find($site_id)->site_name;

return view('newsite', compact('site_id', 'siteName', 'reports'));
}

Это потому, что я получаю только три данных с моего сайта, поэтому мои идентификаторы равны нулю. Но спасибо вам огромное, ребята, что помогли мне. Хорошего дня! ~

Другие вопросы по теме