#php #laravel
Вопрос:
Мне нравится использовать livewire вместо контроллера
public function index()
{
return view('advert.index', [
'posts' => Advert::latest()->filter(
request(['search', 'category', 'author'])
)->paginate(18)->withQueryString()
]);
}
в живом проводе <livewire:advert.home :querys="request(['search', 'category', 'author'])">
public function mount($querys)
{
$this->querys = $querys;
}
public function render()
{
$this->posts = Advert::latest()->filter([$this->querys])->paginate($this->perPage)->withQueryString();
}
но ничего не работает
, это в основном говорят
Общедоступное свойство компонента Livewire [advert.home] [сообщения] должно иметь тип: [числовое, строковое, массивное, нулевое или логическое значение]. Только защищенные или частные свойства могут быть заданы как другие типы, поскольку JavaScript не нуждается в доступе к ним.
Я заблудился, я использую это, но это плохо работает и показывает ошибку выше. и посмотрите те же данные, переданные компоненту livewire.
и нет никакой разницы между livewire $this->сообщения и «сообщения» от контроллера, я не могу этого понять.
например, «сообщения» dd($сообщения) от контроллера
IlluminatePaginationLengthAwarePaginator {#1412 ▼
#total: 2
#lastPage: 1
#items: IlluminateDatabaseEloquentCollection {#1402 ▼
#items: array:2 [▼
0 => AppModelsAdvert {#1409 ▼
#with: array:3 [▶]
#fillable: array:8 [▶]
#connection: "mysql"
#table: "adverts"
#primaryKey: "id"
#keyType: "int"
incrementing: true
#withCount: []
preventsLazyLoading: false
#perPage: 15
exists: true
wasRecentlyCreated: false
#attributes: array:12 [▶]
#original: array:12 [▶]
#changes: []
#casts: []
#classCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:3 [▶]
#touches: []
timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
1 => AppModelsAdvert {#1410 ▼
#with: array:3 [▶]
#fillable: array:8 [▶]
#connection: "mysql"
#table: "adverts"
#primaryKey: "id"
#keyType: "int"
incrementing: true
#withCount: []
preventsLazyLoading: false
#perPage: 15
exists: true
wasRecentlyCreated: false
#attributes: array:12 [▶]
#original: array:12 [▶]
#changes: []
#casts: []
#classCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:3 [▶]
#touches: []
timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
]
}
#perPage: 18
#currentPage: 1
#path: "https://awento.ddns.net/search"
#query: []
#fragment: null
#pageName: "page"
onEachSide: 3
#options: array:2 [▶]
}
и livewire $это->сообщения
ddd($сообщений)
IlluminatePaginationLengthAwarePaginator {#1470 ▼
#total: 2
#lastPage: 1
#items: IlluminateDatabaseEloquentCollection {#1458 ▼
#items: array:2 [▼
0 => AppModelsAdvert {#1465 ▼
#with: array:3 [▶]
#fillable: array:8 [▶]
#connection: "mysql"
#table: "adverts"
#primaryKey: "id"
#keyType: "int"
incrementing: true
#withCount: []
preventsLazyLoading: false
#perPage: 15
exists: true
wasRecentlyCreated: false
#attributes: array:12 [▶]
#original: array:12 [▶]
#changes: []
#casts: []
#classCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:3 [▶]
#touches: []
timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
1 => AppModelsAdvert {#1467 ▼
#with: array:3 [▶]
#fillable: array:8 [▶]
#connection: "mysql"
#table: "adverts"
#primaryKey: "id"
#keyType: "int"
incrementing: true
#withCount: []
preventsLazyLoading: false
#perPage: 15
exists: true
wasRecentlyCreated: false
#attributes: array:12 [▶]
#original: array:12 [▶]
#changes: []
#casts: []
#classCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:3 [▶]
#touches: []
timestamps: true
#hidden: []
#visible: []
#guarded: array:1 [▶]
}
]
}
#perPage: 15
#currentPage: 1
#path: "https://awento.ddns.net"
#query: []
#fragment: null
#pageName: "page"
onEachSide: 3
#options: array:2 [▶]
}
Комментарии:
1. сделайте dd($this->сообщения) в методе рендеринга и посмотрите, что вы получаете, кажется, это неправильное значение для рендеринга livewire
2. @Prospero спасибо, теперь я обновил эту полезную информацию.
Ответ №1:
После некоторых проб и ошибок я понимаю, что проблема связана с целыми данными, если мы организуем данные в той или иной форме, то проблем не будет. Итак, теперь я создаю массив для передачи данных с помощью некоторого foreach. Если есть другой лучший способ, пожалуйста, дайте мне знать.
$postss = Advert::latest()->filter($this->querys)->paginate($this->perPage)->withQueryString();
$posts = array();
foreach($postss as $post)
{
array_push($posts, $post);
}
$this->posts = $posts;
Похоже, что разбиение на страницы сейчас не работает в livewire с использованием limit.