繁体   English   中英

在 Laravel 中正确读取表数据

[英]Reading table data properly in Laravel

因此,我目前正在使用 Laravel 进行练习,并且遇到了一个问题,即 sql 查询将我的第二个表中的所有内容作为数组读取,而不是应该分配给它的列。

我有一个包表和一个资源表来填充这些包。 包名称和价格工作正常,但是当我需要从资源中读取时,我得到了这个:

[{"id":2,"resource":"Vegetarian menu","package_id":2,"created_at":"2022-06-18T19:34:48.000000Z","updated_at":"2022-06-18T19:34:48.000000Z"},{"id":3,"resource":"Standard Menu","package_id":2,"created_at":"2022-06-18T19:35:31.000000Z","updated_at":"2022-06-18T19:35:31.000000Z"}]

当它真的应该只是“素食菜单”和“标准菜单”时

我究竟做错了什么?

//封装模型

class Package extends Model { use HasFactory;

protected $fillable = ['name'];

public function resources()

{
    return $this->hasMany(Resource::class);
} }

//包控制器

class PackageController extends Controller {public function index(){
// SELECT * FROM packages
 $packages = Package::with('resources')->get();

 return view('service', compact('packages')); } }

//资源模型

class Resource extends Model {
 use HasFactory;

 protected $fillable = ['package_id', 'resource'];

 public function package()

{
    return $this->belongsTo(Package::class);
} }

// 用户界面页面

@foreach ($packages as $package)

        <div class="tile is-parent"><!-- each child tile needs it's own parent -->
            <article class="tile is-child box has-text-centered">
                <figure class="image is-96x96 is-inline-block">
                    <img class="is-rounded" src="https://bulma.io/images/placeholders/96x96.png" alt="">
                </figure>

                <p class="subtitle has-text-centered">{{ $package->name }}</p>
                
                <h4 class="is-size-5 has-text-centered">£{{ number_format($package->cost) }}.00</h4>

                 <div class="content">
                 
                    <ul>
                        <li>{{ $package->resources }}</li>
                    </ul>
                
                </div><!-- content -->

            </article>
        </div><!-- parent -->
    
    @endforeach

你正确地得到了你所要求的。 与每个包关联的资源集合。

[
 {
  "id":2,
  "resource":"Vegetarian menu",
  "package_id":2,
  "created_at":"2022-06-18T19:34:48.000000Z",
  "updated_at":"2022-06-18T19:34:48.000000Z"
 },

 {
  "id":3,
  "resource":"Standard Menu",
  "package_id":2,
  "created_at":"2022-06-18T19:35:31.000000Z",
  "updated_at":"2022-06-18T19:35:31.000000Z"
  }
]

如果要限制资源关系上的字段,则应将查询修改为

class PackageController extends Controller {

  public function index(){

   // SELECT * FROM packages eager loads resource name and package_id
  
   $packages = Package::with('resources:resource,package_id')->get();

   return view('service', compact('packages')); 
  } 
}

你只需要遍历相关的集合

@foreach ($packages as $package)

    <div class="tile is-parent"><!-- each child tile needs it's own parent -->
        <article class="tile is-child box has-text-centered">
            <figure class="image is-96x96 is-inline-block">
                <img class="is-rounded" src="https://bulma.io/images/placeholders/96x96.png" alt="">
            </figure>

            <p class="subtitle has-text-centered">{{ $package->name }}</p>
            
            <h4 class="is-size-5 has-text-centered">£{{ number_format($package->cost) }}.00</h4>

             <div class="content">
             
                <ul>
                    @foreach ($package->resources as $r)
                      <li>{{ $r->resource }}</li>
                    @endforeach
                </ul>
            
            </div><!-- content -->

        </article>
    </div><!-- parent -->

@endforeach

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM