我有 3 個這樣的表:
新聞表:
|---------|------------------|
| news_id | news_title |
|---------|------------------|
| 1 | Title 1 |
|---------|------------------|
| 2 | Title 2 |
|---------|------------------|
服務表:
|------------|----------------|---------------|
| service_id | service_code | service_name |
|------------|----------------|---------------|
| 1 | home | Home |
|------------|----------------|---------------|
| 2 | apartment | Apartment |
|------------|----------------|---------------|
新聞服務表:
|-----------------|----------------|---------------|
| news_service_id | news_id | service_code |
|-----------------|----------------|---------------|
| 1 | 2 | home |
|-----------------|----------------|---------------|
| 2 | 2 | apartment |
|-----------------|----------------|---------------|
| 3 | 1 | apartment |
|-----------------|----------------|---------------|
我試圖從新聞表中獲取串列,并通過新聞服務表從服務表中獲取新聞串列中每一行的服務代碼串列。例子:
|---------|------------------|----------------|-----------------|
| news_id | news_title | service_code | service_name |
|---------|------------------|----------------|-----------------|
| 1 | Title 1 | apartment | Apartment |
|---------|------------------|----------------|-----------------|
| 2 | Title 2 |apartment, home | Apartment, Home |
|---------|------------------|----------------|-----------------|
這是我的代碼:
班級新聞表:
class NewsTable extends Model
{
protected $table = "news";
protected $primaryKey = "news_id";
public function list(array $search = [])
{
return $this->select(
"{$this->table}.news_id",
"{$this->table}.news_title"
)
->get();
}
}
類新聞服務表:
class NewsServiceTable extends Model
{
protected $table = "news_service";
protected $primaryKey = "news_service_id";
public function listById($id)
{
return $this->select("{$this->table}.service_code", "s.service_name")
->leftJoin("service as s", "s.service_code", "=", "{$this->table}.service_code")
->where("{$this->table}.news_id", $id)
->get()
->toArray();
}
}
我的控制器類:
class NewsController extends Controller
{
protected $news;
protected $newsService;
public function __construct(NewsTable $news, NewsServiceTable $newsService)
{
$this->news = $news;
$this->newsService = $newsService;
}
public function listAction(Request $request)
{
$param = $request->filter;
$data = $this->news->list();
foreach ($data as $key => $item) {
$service = $this->newsService->listById($item->news_id);
$data[$key]["service"] = $service;
}
return $data;
}
}
這是我的結果:
[
{
"news_id": 1,
"news_title": "Title 1"
"service": [
{
"service_code": "apartment",
"service_name": "Apartment"
}
]
},
{
"news_id": 2,
"news_title": "Title 2"
"service": [
{
"service_code": "home",
"service_name": "Home"
},
{
"service_code": "apartment",
"service_name": "Apartment"
}
]
}
]
現在,如果我將關鍵字“home”傳遞給我的控制器并將其傳遞給 param 變數,我想按該值對這個陣列物件進行排序,陣列服務中具有“home”值的物件將上升,另一個將成為像這樣下去:
[
{
"news_id": 2,
"news_title": "Title 2",
"service": [
{
"service_code": "home",
"service_name": "Home"
},
{
"service_code": "apartment",
"service_name": "Apartment"
}
]
},
{
"news_id": 1,
"news_title": "Title 1",
"service": [
{
"service_code": "apartment",
"service_name": "Apartment"
}
]
}
]
但我真的不知道該怎么做。
我試圖為你清楚地描述我的問題。希望你能理解我的問題。
非常感謝!
uj5u.com熱心網友回復:
嘗試這個。
class NewsController extends Controller
{
protected $news;
protected $newsService;
public function __construct(NewsTable $news, NewsServiceTable $newsService)
{
$this->news = $news;
$this->newsService = $newsService;
}
public function listAction(Request $request)
{
$param = $request->filter;
$data = $this->news->list();
foreach ($data as $key => $item) {
$service = $this->newsService->listById($item->news_id);
$data[$key]["service"] = $service;
}
$order_data = array();
$keyword = "home";
foreach ($data as $key => $item) {
if(array_search($keyword, array_column($item["service"], 'service_code')) !== false){
array_unshift($order_data, $item);
}else{
$order_data[] = $item;
}
}
return $order_data;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329492.html
上一篇:在PHP中依次突出顯示不同的單詞
下一篇:Laravel8外鍵遷移表
