获取多个外键值并在视图上输出

时间:2018-12-29 01:55:01

标签: sql laravel laravel-5 eloquent laravel-blade

我正在预订系统,这是我当前正在使用的表。我无法获取客户付款的外键值。我已经将关系放入模型中了。

预订

    D:\kiwiAdmission\flask>flask run
 * Serving Flask app "kiwi_flask.py"
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "c:\python36\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\python36\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Python36\Scripts\flask.exe\__main__.py", line 9, in <module>
  File "c:\python36\lib\site-packages\flask\cli.py", line 894, in main
    cli.main(args=args, prog_name=name)
  File "c:\python36\lib\site-packages\flask\cli.py", line 557, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "c:\python36\lib\site-packages\click\core.py", line 717, in main
    rv = self.invoke(ctx)
  File "c:\python36\lib\site-packages\click\core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "c:\python36\lib\site-packages\click\core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "c:\python36\lib\site-packages\click\core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "c:\python36\lib\site-packages\click\decorators.py", line 64, in new_func

    return ctx.invoke(f, obj, *args, **kwargs)
  File "c:\python36\lib\site-packages\click\core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "c:\python36\lib\site-packages\flask\cli.py", line 771, in run_command
    threaded=with_threads, ssl_context=cert)
  File "c:\python36\lib\site-packages\werkzeug\serving.py", line 814, in run_sim
ple
    inner()
  File "c:\python36\lib\site-packages\werkzeug\serving.py", line 774, in inner
    fd=fd)
  File "c:\python36\lib\site-packages\werkzeug\serving.py", line 660, in make_se
rver
    passthrough_errors, ssl_context, fd=fd)
  File "c:\python36\lib\site-packages\werkzeug\serving.py", line 577, in __init_
_
    self.address_family), handler)
  File "c:\python36\lib\socketserver.py", line 453, in __init__
    self.server_bind()
  File "c:\python36\lib\http\server.py", line 138, in server_bind
    self.server_name = socket.getfqdn(host)
  File "c:\python36\lib\socket.py", line 673, in getfqdn
    hostname, aliases, ipaddrs = gethostbyaddr(name)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8a in position 5: invalid
start byte

客户

    <?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class booking extends Model
{
   protected $fillable = ['clientID', 'checkInDate', 'checkOutDate', 'roomsCount', 'roomTypeID', 'adultsCount', 'childrenCount', 'amenityID', 'paymentID'];


    public function client()
    {
        return $this->belongsTo('App\Client','clientID');
    }
    public function payment()
    {
        return $this->hasOne('App\Payment');
    }
    public function amenities()
    {
        return $this->hasOne('App\Amenities');
    }

付款

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class client extends Model
{
   protected $fillable = ['fullNmae', 'firstName', 'lastName', 'phoneNumber', 'emailAddress'];
  public function booking()
  {
      return $this->hasMany('App\Booking');
  }
}

我当前正在使用它来访问外键

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class payment extends Model
{
   protected $fillable = ['clientID', 'paymentMethod', 'invoiceNum', 'accountName', 'amountPaid', 'datePaid', 'payment_image', 'comments'];
  public function booking()
  {
      return $this->belongsTo('App\Booking');
  }
}

视图

$bookingDetail = booking::with('client', 'payment')->get();
        return view('detail')
        ->with('bookingDetail', $bookingDetail);

我遇到的错误

  

SQLSTATE [42S22]:找不到列:1054“ where子句”中的未知列“ clients.id”(SQL:从{{ $bookingDetail->payment->paymentMethod }} 中选择*,其中clientsclients 3,4,5,6,7,8,9,10,11,12,13,14,15,16,17))

这是正确的方法吗?还是我错过了一些东西。我是laravel的新手,所以我不知道这是否是正确的方法

1 个答案:

答案 0 :(得分:0)

定义关系时,laravel可以使用“ methodName” +“ _ id”结构检测外键。

但是,如果您的外键与此模式不匹配,则必须手动指定键。

public function booking()
{
  return $this->belongsTo('App\Booking',$foreignKey,$ownerKey);
}

public function payment()
{
    return $this->hasOne('App\Payment',$foreignKey, $ownerKey);
}