У меня есть 2 массива, которые я создал из 2 запросов SQL.

Я хочу превратить их в именованный массив, а затем завершить слияние массивов, причина этого в том, что они имеют разную информацию и называются по-другому, вы увидите, что есть 2 переменных массива $ AddonDomainSelect и $ PackageSelect.

При выполнении DD для $ cpanelAcounts или $ AddonDomains я получаю только один результат вместо многих, которые должны быть в массиве.

Это была попытка объединить в один и тот же массив. но это, на мой взгляд, ошибки при прохождении туда.

Контроллер

    <?php

namespace App\Http\Controllers\Manage;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Gufy;
use App\Package;
use App\AddonDomain;
use App\User;

class WebsiteManage extends Controller
{
    public function index(){
      $userid = auth()->user()->client_id;
      
      $AddonDomainSelect = AddonDomain::select('username', 'domain', 'server', 'addon_domain', 'doc_root')
                           ->where('client_id', '=', $userid)
                           ->get();
       $AddonDomains = [];
            foreach ($AddonDomainSelect as $AddonDomain) {
  
        $AddonDomains = [
          'username' => $AddonDomain['username'], 
          'server' => $AddonDomain['server'],
          'domain' => $AddonDomain['addon_domain'],
          'doc_root' => $AddonDomain['doc_root']
        ];
          
    }     
      
      
      
      
      $PackageSelect = Package::select('username', 'domain', 'serverhostname')
                           ->where('client_id', '=', $userid)
                           ->get();
       
      
      $cpanelAcounts = [];
      foreach ($PackageSelect as $cpanelAccount) {
      
        $cpanelAcounts = [ 'username' => $cpanelAccount['username'], 
          'server' => $cpanelAccount['serverhostname'],
          'domain' => $cpanelAccount['domain'],
          'doc_root' => '/'];
          
    }     
             
   $AllWebsites = array_merge($AddonDomains, $cpanelAcounts);
     
                          
      return view('manageweb.AllWebsites',[
        'websites' => $AllWebsites,
                ]);
    }
}

Вид

 `@extends('layouts.standardHeader')
    
    @section('content')
    
    <section id="auto-layout-columns">
    <div class="app-content content">
      <div class="content-wrapper">
          <div class="content-header row" >
     
       
      
      <div class="content-header-left col-12 mb-2 mt-1">
                <div class="row breadcrumbs-top">
                  <div class="col-12">
                    
                    <div class="breadcrumb-wrapper col-12">
                      <ol class="breadcrumb p-0 mb-0">
                        <li class="breadcrumb-item"><a href="index.html"><i class="bx bx-home-alt"></i></a>
                        </li>
                        <li class="breadcrumb-item"><a href="#">Dashboard</a>
                        </li>
                        <li class="breadcrumb-item active">Manage Websites
                         </li>
                      </ol>
                    </div>
                    
                  </div>
                </div>
              </div>
      </div>
    
    <div class="row" id="basic-table">
      
           
       <div class="col-12">
          <div class="card">
             <div class="card-header">
                <h4 class="card-title">Manage Websites</h4>
             </div>
            
             <div class="card-content">
               
                <div class="card-body">
                   <p class="card-text"> 
                   </p>
            <div class="col-md-6 ">
                            
                                <div class="input-group">
                                  <input type="text" class="form-control" onkeyup="myFunction()" id="myInput" placeholder="Search Domain Name" aria-describedby="button-addon2">
                                  <div class="input-group-append" id="button-addon2">
                                    
                                  </div>
                                </div>
                             <td class="text-center py-1">
                       
                          </div>
                  <br>
                  
                   <!-- Table with outer spacing -->
                   <divn id="myTable"class="table-responsive">
                      <table class="table">
                         <thead>
                            <tr>
                               <th>Domain</th>
                               <th>cPanel user</th>
                               <th>Server Hostname</th>
                              <th>Document Root  </th>
                               
                               <th></th>
                            </tr>
                         </thead>
                         <tbody>
                          @foreach ($websites as $website)
                            <tr>
                               <td class="text-bold-500">{{$website->domain}}</td>
                               <td>{{$website->username}}</td>
                               <td class="text-bold-500">{{$website->serverhostname}}</td>
                               <td>/</td>
                               
                               <td> <a href="#" class="btn btn-info shadow mr-1 mb-1">Manage</a></td></td>
                            </tr>
                           @endforeach
                         </tbody>
                      </table>
                   </div>
                </div>
               
             </div>
          </div>
       </div>
    </div>
        <script>
    function myFunction() {
      var input, filter, table, tr, td, i, txtValue;
      input = document.getElementById("myInput");
      filter = input.value.toUpperCase();
      table = document.getElementById("myTable");
      tr = table.getElementsByTagName("tr");
      for (i = 0; i < tr.length; i++) {
        td = tr[i].getElementsByTagName("td")[0];
        if (td) {
          txtValue = td.textContent || td.innerText;
          if (txtValue.toUpperCase().indexOf(filter) > -1) {
            tr[i].style.display = "";
          } else {
            tr[i].style.display = "none";
          }
        }       
      }
    }
    </script>
        
        
        
        
    </div>
      </div>
      </section>
    @endsection`

Я получаю следующую ошибку.

Попытка получить свойство "домен" не-объекта (View: /var/www/cp/resources/views/manageweb/AllWebsites.blade.php)

Выделение "{{$ website-> domain}}" в журналах ошибок.

Спасибо, что искали. Надеюсь, вы заметите, что я делаю неправильно.

1
James 14 Сен 2020 в 09:33

2 ответа

Лучший ответ

Проблема, с которой вы столкнулись, наряду с уже упомянутым способом использования значений массива вместо свойств объекта, находится в ваших двух массивах, которые вы объединяете

foreach ($PackageSelect as $cpanelAccount) {

        $cpanelAcounts = [ 'username' => $cpanelAccount['username'], 
          'server' => $cpanelAccount['serverhostname'],
          'domain' => $cpanelAccount['domain'],
          'doc_root' => '/'];

    }

В конечном итоге это приведет к тому, что $ cpanelAcounts - это просто плоский массив с ключами: 'username', 'server', 'domain' и 'doc_root', поэтому, когда вы углубляетесь в него с помощью "foreach", вы повторяете значения этих ключей - ни один из них не имеет подмассива с ключом 'domain', и это ошибка, я думаю, вы хотите, чтобы это был массив массивов, поэтому он должен быть

$cpanelAcounts[] = [ 'username' => $cpanelAccount['username'], 
          'server' => $cpanelAccount['serverhostname'],
          'domain' => $cpanelAccount['domain'],
          'doc_root' => '/'];

Или используйте array_push ()

1
Ivan Grigorov 14 Сен 2020 в 09:49

Измените это в своем файле лезвия

<td class="text-bold-500"> {{ $website['domain'] }}</td>
<td> {{ $website['username'] }}}</td>
<td class="text-bold-500"> {{ $website['serverhostname'] }}</td>
                 
1
Vikas Katariya 14 Сен 2020 в 06:38