我正在预订系统,这是我当前正在使用的表。我无法获取客户付款的外键值。我已经将关系放入模型中了。
预订
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 }}
中选择*,其中clients
。clients
3,4,5,6,7,8,9,10,11,12,13,14,15,16,17))
这是正确的方法吗?还是我错过了一些东西。我是laravel的新手,所以我不知道这是否是正确的方法
答案 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);
}